Jcily  
个人博客转到www.0oco0.com

在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

 

 

posted on 2009-05-30 14:38  Jcily  阅读(2050)  评论(0)    收藏  举报