Export、PaintTo、PaintIn的输出图片说明解决方案
发布时间:2011-06-24 19:36:33 文章来源:www.iduyao.cn 采编人员:星星草
Export、PaintTo、PaintIn的输出图片说明
如何从VG里面导出图片?VG提供了三个功能,而这三个功能如下:
Export
把当前页面中的图形以图片的形式输出。
bool = Export( string, int )
第一个参数是要输出的文件名。
第二个参数是要输出的文件类型,目前有以下两种:
1-------------bmp位图格式
2-------------emf图元格式
返回值是True表示输出成功,否则失败,可能是文件名非法或者图片太大等原因。
vgmain.Export(filename,1);
PaintTo
把图形画到指定的设备(Device Context)上参数:标准Windows设备,整数型。按当前缩放比例画图。
void=PaintTo(int)
VG脚本示例:下面的代码把当前选中的图形画到屏幕上
extern int=GetDC(int) in User32.dll
extern void=ReleaseDC(int,int) in User32.dll
hdc=GetDC(Handle)
Selection.PaintTo(hdc)
ReleaseDC(Handle,hdc)
PaintIn
图形单元类、页面类、视图类的函数成员,把图形画到指定的设备(Device Context)上的一个矩形框中。第一个参数:标准Windows设备,整数型。后两个参数:矩形框的宽度和高度。
void=PaintIn(int,int,int)
VG脚本示例:下面的代码把当前页面的图形画到屏幕上32x32的区域
extern int=GetDC(int) in User32.dll
extern void=ReleaseDC(int,int) in User32.dll
hdc=GetDC(Handle)
ActiveSheet.PaintIn(hdc,32,32)
ReleaseDC(Handle,hdc)
Export 只是把VG画图上的当前图,以比例ZOOM=1来把VG图形输出到一个位图文件或EMF文件里面。PaintTo把VG的所有图形、或页面、或某图元等直接画出一个Windows的HDC设备(GDI Device Context)上。PaintIn把VG的所有图形、或页面、或某图元等直接画出一个Windows的HDC设备(GDI Device Context)上的一个矩形框里面。
例子说明(把DELPHI做的输出JPG做为例子说明):
在Delphi里的Form里加一个按钮和一个VG控件,代码如下控制:
procedure TForm1.Button1Click(Sender: TObject);
var
bmp : TBitmap;
jpg : TJPEGImage;
i, x, y, w, h : Integer;
p : TPoint;
begin
bmp := TBitmap.Create;//首先创建一个BMP图像,准备把VG图形画到此BMP上
jpg := TJPEGImage.Create; //首先创建一个JPG图像,准备把BMP转化为JPG格式
vgctrl1.SelectAll;
x := round( vgctrl1.ActiveSheet.Selection.Left );
y := round( vgctrl1.ActiveSheet.Selection.Top );
w := round( vgctrl1.ActiveSheet.Selection.Width );
h := round( vgctrl1.ActiveSheet.Selection.Height );
bmp.Width := w + 1;
bmp.Height := h + 1; //得到BMP的大小,好让所有VG图形都能画到BMP上去
bmp.Canvas.Lock;
SetViewportOrgEx( bmp.Canvas.Handle, round( vgctrl1.RangeLeft ) - x, round( vgctrl1.RangeTop ) - y, @p ); //设置BMP画布的原点,
for i := 0 to vgctrl1.ActiveSheet.Selection.UnitCount - 1 do
vgctrl1.ActiveSheet.Selection.Units[i].PaintTo( Integer( bmp.Canvas.Handle ) );
//利用PaintTo把VG的所有图形一个个地画到BMP的画布里。
SetViewportOrgEx( bmp.Canvas.Handle, p.x, p.y, nil );
bmp.Canvas.Unlock;
jpg.Assign( bmp ); //绑定BMP到JPG里,使JPG可享BMP的数据,然后自己保存为文件,就是JPG格式的文件了。
if SavePictureDialog1.Execute then//文件选择框,得到一个文件路径。
jpg.SaveToFile( SavePictureDialog1.FileName );
jpg.Free;
bmp.Free;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
vgctrl1.Design( '可调节的门.tbl' );
vgctrl1.Zoom := 1;
end;
下载请点击:http://www.visual-graph.com/
------解决方案--------------------
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
delphi 绘图
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if (CheckBox1.Checked) then
begin
ADOQuery2.A...
-
键列信息不足或不正确,更新影响到过多的行
我把csv文件内的很多记录,要使用ado写入到excel中,结果报如题错误
问题该怎么解决啊
...
-
dax error : access violation at address
<OBJECT classid="clsid:A318A9AC-E75F-424C-9364-6B40A848FC6B" width=20 height=20 ...
-
c# 操作excel 去掉单元格已有的边框
如题,excel有黑色边框,怎么样才能把边框去掉?
------解决方案--------------------
SQL code
...
-
为什么现在delphi写的程序都会被杀软误报?
360杀毒,金山毒霸都误报有毒,没有写任何代码,生成都误报毒,SysConst.dcu只有12kb,自己没有...
-
关于Delphi7 调用C++ dll 传参问题。
C++ DLL h文件:C/C++ code
extern "C" __declspec(dllexport) unsigned int __stdcall W...
-
求高手封装成一个方法
C# code
private void Form1_Load(object sender, EventArgs e)
{
PrintDocument pr...
-
delphi7 dbexpress sqlserver2005
本人新手,请问delphi7可以用dbexpress中的sqlconnection组件连接sqlserver2005中的数据库吗?自己...
-
动态生成多个button并触发该事件 急!急!急!!!
在asp.net中,在指定位置动态生成了多个button,怎么样获取他所对应的ID
我的做法是:
在页面...
-
c#关于窗体间传值的问题
我在网上下了个代码,它的代码:在窗体A中能使用窗体B中定义的东西(它定义的是个委托)。
我却发现个很奇怪的事...