在做打印預覽時發現有趣的現象
打印預覽時寬度設置為mm的線與設置為mm的線顯示效果一樣無區別打印機輸出正常
打印預覽時相同寬度的線有些顯示有些不顯示 打印機輸出正常
仔細查看了一下實際上是映射模式下的顯示問題鑒於映射模式總是讓人焦頭爛額值得總結一下
開始分析
第一步寫一個MM_TEXT模式的例子打印條豎線寬度由遞增
dc
SetMapMode(MM_TEXT);
for(int ii=
;ii<=
;ii++)
{
CPen pen;
pen
CreatePen(PS_SOLID
ii
RGB(
));
CPen *pOldPen = dc
SelectObject(&pen);
dc
MoveTo(xStart+xInterval*ii
);
dc
LineTo(xStart+xInterval*ii
xLineLen);
dc
SelectObject(&pOldPen);
}
當然會輸出不同寬度的條線 很正常映射模式是像素為單位
第二步模擬一下打印預覽下的模式(mm的方式)
long lLogInch =
;
dc
SetMapMode(MM_ANISOTROPIC);
dc
SetWindowExt(lLogInch
lLogInch);
dc
SetViewportExt(dc
GetDeviceCaps(LOGPIXELSX)
dc
GetDeviceCaps(LOGPIXELSY));
映射個單位是mm 同樣用上面的代碼輸出 嘿線一樣粗線一樣粗 實際打印機輸出粗細是遞增的非常正常 Why?
第三步估計是精度問題吧?看看新的映射模式下每根線的實際輸出像素 首先通過long lX = dcGetDeviceCaps(LOGPIXELSX); 取得當前顯示器一個英寸是等於個像素
來算一下
毫米 ——》/ =
毫米 ——》
毫米 ——》
毫米 ——》
毫米 ——》
毫米 ——》
呵很好解釋了四捨五入後都是像素都是像素 實際打印機呢? lX = 不用計算了吧精度高打印出來當然就OK了
[] []
From:http://tw.wingwit.com/Article/program/net/201311/14847.html