[高分求助] Printer StrechDraw的放大比例问题

hujf1987 2013-01-12 03:01:55
我在做一个矢量图(TMetafile)的打印,想将该矢量图均匀分布到A4纸的中央(宽0.2~0.8,长0.2~0.8),请问如何设置矢量图的Width\Height才能均与分布?

以下是我失败的代码,请高手帮忙,解决还可以再加100分

metafile_dpix := GetDeviceCaps(Self.Canvas.Handle, LOGPIXELSX);
printer_dpix := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
metafile_dpiy := GetDeviceCaps(Self.Canvas.Handle, LOGPIXELSY);
printer_dpiy := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
mf1 := TMetafile.Create;
Printer.Orientation := poPortrait;
w := Round( Printer.PageWidth * 0.6 * metafile_dpix / printer_dpix );
h := Round( Printer.PageHeight * 0.6 * metafile_dpiy / printer_dpiy );
mc1 := TMetafileCanvas.Create(mf1, 0); //图元文件mf1的画布
mf1.Width := w;
mf1.Height := h;
mc1.Pen.Width := 2;
mc1.Font.Size := 12;
mc1.MoveTo(0, 0); //边框
mc1.LineTo(w, 0);
mc1.LineTo(w, h);
mc1.LineTo(0, h);
mc1.LineTo(0, 0);
mc1.MoveTo(0, 0); //对角线
mc1.LineTo(w, h);
mc1.MoveTo(0, h);
mc1.LineTo(w, 0);
mc1.free;

Printer.BeginDoc; //打印
Printer.NewPage;
Printer.Canvas.TextOut(Round(Printer.PageWidth * 0.15), Round(Printer.PageHeight * 0.15), '-1');
//目的区域外边框
Printer.Canvas.MoveTo(Round(Printer.PageWidth * 0.2), Round(Printer.PageHeight * 0.2));
Printer.Canvas.LineTo(Round(Printer.PageWidth * 0.8), Round(Printer.PageHeight * 0.2));
Printer.Canvas.LineTo(Round(Printer.PageWidth * 0.8), Round(Printer.PageHeight * 0.8));
Printer.Canvas.LineTo(Round(Printer.PageWidth * 0.2), Round(Printer.PageHeight * 0.8));
Printer.Canvas.LineTo(Round(Printer.PageWidth * 0.2), Round(Printer.PageHeight * 0.2));
Printer.Canvas.StretchDraw(Rect(Round(Printer.PageWidth * 0.2), Round(Printer.PageHeight * 0.2), Round(Printer.PageWidth * 0.8), Round(Printer.PageHeight * 0.8)), mf1);
Printer.EndDoc;
mf1.Free;


我想均与分布在A4纸上的目的区域的,可是却得到如下的结果:
...全文
300 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
几年前做过打印相关的程序,记得当时被那个dpi搞得头昏脑涨。dpi和厘米之间的关系,和电脑显示器之间的关系要高明白。电脑显示器默认是96,具体忘记了,楼主注意一下。
静_海 2013-02-14
  • 打赏
  • 举报
回复
理解不深,只能推断一下,不知对不对。 如果 StretchDraw 没问题,那只能是对角线本来就没画满 mf1 的 canvas 空间,进而推断,画对角线时,mc1 平面要大于 mf1 设定的宽和高,那就是 mc1 的创建过程有问题。 当然,如果前提不对,这个推断也就错了。
zcy00772 2013-02-10
  • 打赏
  • 举报
回复
楼主为什么非要用图元呢,其实图元的宽、高没有什么意义吧?具体我也不懂 不过如果用位图的话,楼主的思路到是可以的。
zcy00772 2013-01-12
  • 打赏
  • 举报
回复
Printer.Canvas.StretchDraw 看看帮助?帮你顶一下

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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