用流读出二进制数据,代码论坛中查询!bmp可以直接读取,jpg可加入JPEG单元,cad图形只能直接去研究图形格式!http://www.efg2.com/Lab/Library/Delphi/Graphics/ColinSarsfield_dxfgrph.zip下载该单元文件可获得对DXF格式的支持!假设已将图像数据保存到流Stream中!var strect:Trect; temhi,temwd,temhi2,temwd2,i:integer; begin try if Printer.Printers.Count=0 then begin showmessage('打印机调用错误,请您先安装打印机!'); end else begin TemBmp.LoadFromStream(Stream); TemBmp.HandleType:=bmDIB; if PrintDialog.Execute then begin temhi:=TemBmp.height; temwd:=TemBmp.width; temhi2:=printer.pageheight; temwd2:=printer.pagewidth; with strect do begin if (temhi/temwd-temhi2/temwd2)>0 then begin top:=0; left:=Round((temwd2-temhi2/temhi*temwd)/2); right:=temwd2-Left; bottom:=temhi2; end else begin left:=0; top:=Round((temhi2-temwd2/temwd*temhi)/2); right:=temwd2; bottom:=temhi2-Top; end; end; Printer.BeginDoc; for i:=1 to Printer.Copies do begin Printer.Canvas.StretchDraw(Strect,TemBmp); if i<>Printer.Copies then Printer.NewPage; end; Printer.EndDoc; end; end; except showmessage('打印机调用错误!'); end; end;
strect:Trect;
temhi,temwd,temhi2,temwd2,i:integer;
begin
try
if Printer.Printers.Count=0 then
begin
showmessage('打印机调用错误,请您先安装打印机!');
end
else
begin
TemBmp.LoadFromStream(Stream);
TemBmp.HandleType:=bmDIB;
if PrintDialog.Execute then
begin
temhi:=TemBmp.height;
temwd:=TemBmp.width;
temhi2:=printer.pageheight;
temwd2:=printer.pagewidth;
with strect do
begin
if (temhi/temwd-temhi2/temwd2)>0 then
begin
top:=0;
left:=Round((temwd2-temhi2/temhi*temwd)/2);
right:=temwd2-Left;
bottom:=temhi2;
end
else
begin
left:=0;
top:=Round((temhi2-temwd2/temwd*temhi)/2);
right:=temwd2;
bottom:=temhi2-Top;
end;
end;
Printer.BeginDoc;
for i:=1 to Printer.Copies do
begin
Printer.Canvas.StretchDraw(Strect,TemBmp);
if i<>Printer.Copies then Printer.NewPage;
end;
Printer.EndDoc;
end;
end;
except
showmessage('打印机调用错误!');
end;
end;
一樣!
bitmap無效!