處理使用VC打印嵌入的Web地圖出現圖像模糊,顏色失真的問題

編者:李國帥

qq:9611153 微信lgs9611153

時間:2011-7-26

問題描述及期望效果:

場景是這樣的,使用CHtmlView嵌入googlemap js,用來顯示地圖。然後希望把地圖打印出來。

如果使用ie函數打印地圖經常有問題,還不如直接打印圖片,查詢一下vc下面打印圖片的方法。

 

ie打印問題

         ie打印預覽經常有些不能顯示的方塊

打印類

         直接使用CPaintDialog打印不能預覽

         借用文檔視圖打印圖片不知道具體方法。

 

這裏使用了名叫CQPrint的第三方控件,不過遇到了打印清晰度問題

 

如果在獲取打印位圖的時候,使用了

         memDC.BitBlt(0,0,sz.cx, sz.cy,pdc,0,0,SRCCOPY) ;//保存原有DDB,並選入新DDB入DC

然後StretchDIBits,把圖片的像素轉化爲紙張的像素,到時圖像模糊,顏色失真。

 

我估計是StretchDIBits設備無關縮放導致的,那就先使用設備相關縮放StretchBlt拉伸之後再打印。

如果把StretchBlt放在prt.Dialog()之後打印出來圖像就會被遮擋。所以拷屏操作BitBlt要提前進行。

 

可以把屏幕區域放大後放在位圖裏,再打印到特定紙張,就會更加清晰。

 

因爲在prt.Dialog()之前無法使用

         HDC hPrinterDC = prt.GetPrivateDC()->m_hDC;

         LONG nWidthPaper = (-MulDiv(r.Width(), -GetDeviceCaps(hPrinterDC,LOGPIXELSX),72));

         LONG nHeightPaper =(-MulDiv(r.Height(), -GetDeviceCaps(hPrinterDC,LOGPIXELSY), 72));

         CSize szPaper(nWidthPaper,nHeightPaper);

獲取縮放後的大小,所以暫時設定整體縮放4.5倍,能把所有的圖像顯示出來。

所需資源:

VC,GoogleMap Js, CQPrint

 

詳細說明:

 

總結

         不光是web地圖的打印,mfc對話不加處理,也會出現不夠清晰的問題,應該是圖像的放大以及像素轉換產生的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章