我正在尝试在与打印相关的一些旧代码中找到某种意义。
在打印机上绘制表格时,每个大小和位置属性都将乘以比例因子。该因子由以下代码计算:
{ Printer device-specific information }
FXScale := (GetDeviceCaps(Printer.Handle, LOGPIXELSX)/96) -
((2-(GetDeviceCaps(Printer.Handle, HORZRES)*2) /
GetDeviceCaps(Printer.Handle, PHYSICALWIDTH)));
FYScale := (GetDeviceCaps(Printer.Handle, LOGPIXELSY)/96) -
((2-(GetDeviceCaps(Printer.Handle, VERTRES)*2) /
GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT)));
谁能解释这里发生了什么?我猜想屏幕分辨率和打印机分辨率之间会有一些映射,但是其余的呢?为什么是2?
最佳答案
好的,不确定我是否有完整的答案,但这也许会有助于朝着正确的方向刺激其他人:
FXScale = (LogPixelsX / 96) - (2 - ((2 * HorzRes) / PhysicalWidth))
= (LogPixelsX / 96) - (2 - (2 * (HorzRes / PhysicalWidth)))
= (LogPixelsX / 96) - (2 * (1 - (HorzRes / PhysicalWidth)))
由于保证
PhysicalWidth
大于或等于HorzRes
(请参阅MS documentation),因此1 - (HorzRes / PhysicalWidth) = ((PhysicalWidth - HorzRes) / PhysicalWidth)
。然后我们有:FXScale = (LogPixlesX / 96) - (2 * ((PhysicalWidth - HorzRes) / PhysicalWidth)
(LogPixelsX / 96)
=打印机DPI与屏幕DPI的比率((PhysicalWidth - HorzRes) / PhysicalWidth)
=不可打印宽度与纸张总宽度之比因此,看起来像是计算打印机DPI与屏幕DPI的比率,然后减去不可打印宽度与纸张总宽度之比的两倍。也许2是为了远离打印机的物理限制的边缘?
关于delphi - 缩放像素值以进行打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3100895/