简单问题送高分。 如何将image控件中利用canvas属性描点画出来的图形打印和保存起来。请给出详细方法或者代码。(100分)

  • 主题发起人 主题发起人 gaozhou
  • 开始时间 开始时间
G

gaozhou

Unregistered / Unconfirmed
GUEST, unregistred user!
简单问题送高分。
如何将image控件中利用canvas属性描点画出来的图形打印和保存起来。
请给出详细方法或者代码。
非常感谢,请帮帮忙。
 
image1.Canvas.LineTo(100,100);
image1.Picture.SaveToFile('c:/x.bmp');
 
以下是大致意思:
procedure tform1.button1click(sender:tobject);
var
tp:tprinter;
begin
image1.picture.savetofile('文件名');
tp:=tprinter.create(self);
try
tp.begin
doc;
tp.canvas:=image1.canvas;
tp.enddoc;
finally
tp.free;
end;
end;
 
最简单的打印:
printer.begin
doc;
printer.Canvas.CopyRect(printer.Canvas.ClipRect,image1.canvas,image1.canvas.ClipRect);
printer.enddoc
 
打印时我还要加一些简单的东西,例如打印时间,打印人等。
上面的恐怕不行吧?
 
如果要添加文字,只需在image1上textout即可,也就是说可以先在image1上生成预览,
然后copyRect。当然这中间还有许多东西要写。
 
windbell的方法在Delphi5下编译出错为:
can not assign to a readonly property.意思是TP.Canvas 为只读的属性!
 
将tp.canvas:=image1.canvas;语句改为如下:
tp.Canvas.Draw((PageWidth - image1.picture.graphic.Width) div 2,
(PageHeight - image1.picture.graphic.Height) div 2,
image1.picture.graphic);
试试吧
 
请问windbell Undeclared identifier: 'tprinter' 为什么不能定义阿?[?]
 
打印时,我使用了另一个Image作为转换
var
imgPath: string;
iResult: Integer;
begin
imgPath := ExtractFilePath(Application.ExeName);
Image1.Picture.SaveToFile(imgPath + 'temp.bmp');
Image2.Picture.LoadFromFile(imgPath + 'temp.bmp');
Image2.Stretch := True;
iResult := Application.MessageBox(你真的要打印吗?', '打印提示', MB_YESNO + MB_ICONINFORMATION);
if iResult = IDNO then
Exit
else
begin
with printerdo
try
Orientation := poLandscape;
begin
Doc;
Canvas.StretchDraw(Canvas.ClipRect, Image2.Picture.Graphic);
EndDoc;
except
Abort;
raise;
end;
end;
 
在单元声明中加入Printers的单元声明
uses Printers;
 
说了半天,其实打印机就是一个画布,你把在Image上画的东西再按相同的坐标
再在printer上画一遍就行了,跟在Image上操作一样,只是Printer有一些特殊的
初始设置,只要这样理解工作就好做了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部