GDI 和GDI+ 混合编程
生活随笔
收集整理的這篇文章主要介紹了
GDI 和GDI+ 混合编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要來源于這篇文章
http://www.cnblogs.com/jcily/archive/2009/05/30/1492222.html?login=1#commentform
?
在Win32平臺下圖形繪制相關開發中,都會使用MM_HIMETRIC映射模式,因為這樣的邏輯繪制坐標精度比MM_TEXT要高很多。偶爾我也會使用GDI+的來繪制一些反走樣線條或GDI不能達到的效果。
遇到的問題:
??????1,使用MM_HIMETRIC映射模式的DC進行GDI+繪文字,其效果是文字是倒的。
??????2,同上映射模式下,對于同位置的圖形,分別使用GDI和GDI+繪制,顯示效果上會有一些偏移(相對的輸出誤差)。
至于問題的原因,我沒辦法得知,我看不到GDI+的實現。
解決方法:
??????1,MM_HIMETRIC映射模式下文字倒的問題解決代碼如下:
????//?對繪制矩陣進行臨時的變換來解決????Graphics?m_pGp(hDC);
????Matrix?matrixOld,?matrixNow;
????m_pGp->GetTransform(&matrixOld);????m_pGp->GetTransform(&matrixNow);
????PointF?gpPoint(500,-500);????//?MM_HIMETRIC下文字的邏輯坐標位置
????//?變換繪制矩陣
????matrixNow.Translate(gpPoint.X,?gpPoint.Y);
????matrixNow.Scale(1,-1);
????matrixNow.Rotate(lf.lfEscapement/10);
????matrixNow.Translate(-gpPoint.X,?-gpPoint.Y);
????m_pGp->SetTransform(&matrixNow);
?
????FontFamily??fontFamily(L
"宋體");????Font????????font(&fontFamily,?600,?FontStyleRegular,?UnitPixel);
????SolidBrush??solidBrush(Color(255,255,0,0));
????Status?sresult?=?m_pGp->DrawString(_T(文字還倒不倒),?-1,?&font,?gpPoint,?&solidBrush);
????//?恢復全局矩陣
????m_pGp->SetTransform(&matrixOld);
?
?
??????2,MM_HIMETRIC映射模式下GDI+與GDI圖形輸出誤差解決代碼如下:
Code????Graphics?g(pDC->GetSafeHandle());
????g.SetSmoothingMode(SmoothingModeHighQuality);
????//?偏移修正MM_HIMETRIC映射模式下GDI與GDI+之間DP到LP的轉換值的誤差
????//?得到同一個設備點分別由GDI+和GDI轉化的邏輯點
????Point?gpPt0(0,0);
????g.TransformPoints(CoordinateSpaceWorld,?CoordinateSpaceDevice,?&gpPt0,?1);
????CPoint?pt(0,0);
????pDC->DPtoLP(pt.x,?pt.y);
????//?相減得到誤差
????Point?szTrans(gpPt0.X-pt.x,?gpPt0.Y-pt.y);
????g.TranslateTransform(szTrans.X,?szTrans.Y);
?
?
轉載于:https://www.cnblogs.com/gadfly/archive/2010/07/28/1786572.html
總結
以上是生活随笔為你收集整理的GDI 和GDI+ 混合编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot2 整合Nacos组
- 下一篇: Mongodb java 例子