SetPageUnit(UnitMillimeter)后,Drawiamge到打印机打印出来的大小如何和设置的有偏差啊

SetPageUnit(UnitMillimeter)后,Drawiamge到打印机打印出来的大小怎么和设置的有偏差啊?
本帖最后由 VisualEleven 于 2015-10-19 18:23:22 编辑
pDC是CreateDC(NULL,(LPCTSTR)strPrinterName,NULL,NULL)来的。
Graphics   gs(pDC->m_hDC);

gs.SetPageUnit(UnitMillimeter);
gs.SetPageScale(1.0f); 
gs.DrawImage(&img, 0, 0, 150,-100);
结果到打印机上打印出来并不是150mm,而是有个20mm左右的误差啊,这时啥原因呢,还缺少啥步骤?
------解决思路----------------------
Coordinate Space and Transformation Functions
The following functions are used with coordinate spaces and transformations. 

  
 
ClientToScreen  
CombineTransform  
DPtoLP  
GetCurrentPositionEx  
GetGraphicsMode  
GetMapMode  
GetViewportExtEx  
GetViewportOrgEx  
GetWindowExtEx  
GetWindowOrgEx  
GetWorldTransform  
LPtoDP  
MapWindowPoints  
ModifyWorldTransform  
OffsetViewportOrgEx  
OffsetWindowOrgEx  
ScaleViewportExtEx  
ScaleWindowExtEx  
ScreenToClient  
SetGraphicsMode  
SetMapMode  
SetViewportExtEx  
SetViewportOrgEx  
SetWindowExtEx  
SetWindowOrgEx  
SetWorldTransform  


 

------解决思路----------------------
引用:
这问题是太难还是太简单呀SetPageUnit(UnitMillimeter)后,Drawiamge到打印机打印出来的大小如何和设置的有偏差啊

如果你的程序中已经做了精确计算,那么,就请检查打印机是否设置了比例变换。
如果打印机设置是正确的,就请检查你的程序,是否对打印数据按设备参数进行了MM到DPI的转换
------解决思路----------------------
实例供参考:

//   计算每毫米像素
LPDEVMODE pDevMode;
pDevMode=(LPDEVMODE)GlobalLock(pInfo->m_pPD->m_pd.hDevMode); // 锁定公共变量
GlobalUnlock(pInfo->m_pPD->m_pd.hDevMode); // 解锁公共变量
int wm=pDevMode->dmPaperLength; // 长度0.1mm数
int hm=pDevMode->dmPaperWidth; // 宽度0.1mm数
int pq=pDevMode->dmPrintQuality; // 打印分辨率(像素/英寸)

int dw=10*pq/254; // 打印分辨率(像素/毫米)