图像打印小问题

yangfan369 2003-10-16 05:57:58
//代码如下
procedure TfrmZoom.tbPrintClick(Sender: TObject);
var
ScaleX, ScaleY: Integer;
R: TRect;
sInf1,sInf2,sInf3:String;//打印图像的相关信息
imgPic:TImage;
begin
imgPic:=TImage.Create(nil);
imgPic.Picture.LoadFromFile(FileName);

try
if dlgPrnImg.Execute then
begin
with Printer do
try
Copies :=dlgPrnImg.Copies; // **
BeginDoc;

ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;

sInf1:= '11111111111111';
sInf2:='22222222222';
sInf3:='打印日期:' + DateTimeToStr(Now());
R := Rect(0, 0 , imgPic.Picture.Width * ScaleX, imgPic.Picture.Height * ScaleY );
Canvas.StretchDraw(R, imgPic.Picture.Graphic);
Canvas.TextOut(0,imgPic.Picture.Height* ScaleY + Canvas.Font.Height + 5*ScaleY, '图像信息:' );
Canvas.TextOut(0, imgPic.Picture.Height* ScaleY + Canvas.Font.Height * 2 + 5*ScaleY, sInf1 );
Canvas.TextOut(0, imgPic.Picture.Height* ScaleY + Canvas.Font.Height * 3 + 5*ScaleY, sInf2 );
Canvas.TextOut(0, imgPic.Picture.Height* ScaleY + Canvas.Font.Height * 4 + 5*ScaleY, sInf3 );
finally
EndDoc;
end;
end;


finally
imgPic.Free;
end;
end;
//打印结果如下
=======================================
|
|
| (图像)
|sinf3
|sinf2
|sInf1
|======================================
文字老是打印在图片中,从图片下网上写文字
...全文
36 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Behard 2003-11-09
  • 打赏
  • 举报
回复
看看我写的 BCB 代码
void PrintImage(LPCSTR fielname)
{
TPrinter *prnRep = Printer();

int ipixelPerInchX=GetDeviceCaps(prnRep->Handle,LOGPIXELSX);
int ipixelPerInchY=GetDeviceCaps(prnRep->Handle,LOGPIXELSX);
int ipixelPerCmX=(int)(ipixelPerInchX / 2.54); // 1 英寸为 2.54 cm
int iPixelPerCmY=(int)(ipixelPerInchY / 2.54);

int BaseLeftY = iPixelPerCmY*2; // 自己处理上下预留高度
int BaseLeftX = ipixelPerCmX*2; // 自己处理左右预留宽度

prnRep->BeginDoc() ;

if(FileExists(fielname))
{
// 为什么要两句才能运行正常?
TImage *prnmage = new TImage ( NULL );
prnmage->Picture->LoadFromFile(fielname);
TRect drawRect;
drawRect.Left = BaseLeftX;
drawRect.Top = BaseLeftY;
drawRect.Right = BaseLeftX+ ipixelPerCmX*10; // 自己处理实际高度
drawRect.Bottom = BaseLeftY+ iPixelPerCmY*10; // 自己处理实际宽度
prnRep->Canvas->StretchDraw ( drawRect, prnmage->Picture->Bitmap );
prnRep->Canvas->StretchDraw ( drawRect, prnmage->Picture->Graphic );
delete prnmage;
}
Prntr->EndDoc();
}
很土 2003-11-09
  • 打赏
  • 举报
回复
这是因为打印机的 dpi 与屏幕上的不一样, 你可以把图片进行拉伸.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧