GDI+和GDI的一些基本图形描绘方法函数对比

来源:互联网 发布:mac怎么卸载输入法 编辑:程序博客网 时间:2024/05/18 01:15

GDI+

GDI

// 清空背景
SolidBrush brush(Color(255, 255,255,255));

using namespace Gdiplus;
pGraphics->FillRectangle(&brush,0,0,m_winWidth,m_winHeight);

 

 

//-------------------------------------------
// 画笔准备
int PenWidth = theApp.m_optionDlg.m_iSliderPenWidth;
Pen pen(Color(255, 0, 0, 255), PenWidth);
Pen pen2(Color(255, 255, 0, 0), PenWidth);

 

//-------------------------------------------
// 画对角线
pGraphics->DrawLine(&pen,pRect->left,pRect->top,pRect->right, pRect->bottom);
pGraphics->DrawLine(&pen,pRect->right,pRect->top,pRect->left, pRect->bottom);

//-------------------------------------------
// 画格子
for (int y = 0; y < m_winHeight; y += 10) {
    pGraphics->DrawLine(&pen, 0, y, m_winWidth, y);
}
for (int x = 0; x < m_winWidth; x += 10) {
    pGraphics->DrawLine(&pen, x, 0, x, m_winHeight);
}

//-------------------------------------------
// 画圆弧
pGraphics->DrawArc(&pen2, 0,0, 100,100, 0.0f,360.0f);

 

 

 

 

 

 

//-------------------------------------------
//画填充多边形
SolidBrush fillPolyBrush(Color(128, 255, 0, 0));
Point point1(100, 100);
Point point2(200, 130);
Point point3(250, 160);
Point point4(150, 200);
Point point5( 70, 130);
Point points[5] = {point1, point2, point3, point4, point5};
pGraphics->FillPolygon(&fillPolyBrush, points, 5);

//-------------------------------------------
// 字符串
if (theApp.m_optionDlg.m_strDrawString != "") {
// UNICODE 字串变换
_bstr_t bstr(theApp.m_optionDlg.m_strDrawString );
Font myFont(L"Arial", 42);
PointF origin( 0.0f, 0.0f);

SolidBrush blackBrush(Color(255, 0, 0, 0));
StringFormat format;
format.SetAlignment (StringAlignmentCenter);
pGraphics->DrawString(
bstr,
bstr.length(),
&myFont,
origin,
&blackBrush);
}

// 清空背景
CBrush brush;
brush.CreateSolidBrush (RGB(255, 255, 255));
//-------------------------------------------
//初始画刷保存
CBrush OrigBrush;
CBrush *pTmpBrush = (CBrush*)pDC->SelectObject(brush);
OrigBrush.FromHandle ((HBRUSH)pTmpBrush);

pDC->Rectangle(pRect);
pDC->SelectObject(&OrigBrush);
brush.DeleteObject ();
//-------------------------------------------      
// 画笔准备
int PenWidth = theApp.m_optionDlg.m_iSliderPenWidth;
CPen pen(PS_SOLID, PenWidth, RGB(0, 0, 255));
CPen pen2(PS_SOLID, PenWidth, RGB(255, 0, 0));
//初始画笔保存
CPen OrigPen;
CPen *pTmpPen = (CPen*)pDC->SelectObject(pen);
OrigPen.FromHandle ((HPEN)pTmpPen);
//-------------------------------------------
// 画笔准备
pDC->MoveTo(pRect->left, pRect->top);
pDC->LineTo(pRect->right, pRect->bottom);
pDC->MoveTo(pRect->right, pRect->top);
pDC->LineTo(pRect->left, pRect->bottom);
//-------------------------------------------
// 画格子
for (int y = 0; y < m_winHeight; y += 10) {
pDC->MoveTo(0, y);
pDC->LineTo(m_winWidth, y);}
for (int x = 0; x < m_winWidth; x += 10) {
pDC->MoveTo(x, 0);
pDC->LineTo(x, m_winHeight);}
pDC->SelectObject(&OrigPen);
pen.DeleteObject ();        

 

//-------------------------------------------
// 画圆弧
long width, height;
POINT     cpos;
double    r,srad,erad;
const double m_pi = 3.1415926535758932;
width = 100 - 0;
height = 100 - 0;
cpos.x = 0 + (long)(width / 2.0);
cpos.y = 0 + (long)(height / 2.0);
r = max(width / 2.0, height / 2.0);
srad = 0.0 * m_pi / 180.0;
erad = (0.0 + 360.0) * m_pi / 180.0;
pTmpPen = (CPen*)pDC->SelectObject(pen2);
pDC->Arc(0,0, 100,100,
cpos.x + (long)(r * cos(srad)),
cpos.y + (long)(r * sin(srad)),       
cpos.x + (long)(r * cos(erad)),
cpos.y + (long)(r * sin(erad)));
pDC->SelectObject(&OrigPen);
pen2.DeleteObject ();      
//-------------------------------------------
//画填充多边形
CBrush fillPolyBrush;
fillPolyBrush.CreateSolidBrush (RGB(255, 0, 0));
pTmpBrush = (CBrush*)pDC->SelectObject(fillPolyBrush);
CPoint point1(100, 100);
CPoint point2(200, 130);
CPoint point3(250, 160);
CPoint point4(150, 200);
CPoint point5( 70, 130);
CPoint points[5] = {point1, point2, point3, point4, point5};
pDC->Polygon(points, 5);
pDC->SelectObject(&OrigBrush);
fillPolyBrush.DeleteObject ();
//-------------------------------------------
// 字符串
if (theApp.m_optionDlg.m_strDrawString != "") {
//UNICODE 字串变换
_bstr_t bstr(theApp.m_optionDlg.m_strDrawString );
CFont myFont;
CFont OrigFont;
myFont.CreatePointFont (420, "Arial");
CFont *pTmpFont = (CFont*)pDC->SelectObject(myFont);
OrigFont.FromHandle ((HFONT)pTmpFont);
                  CBrush blackBrush;
blackBrush.CreateSolidBrush (RGB(0, 0, 0));
pTmpBrush = (CBrush*)pDC->SelectObject(blackBrush);
//pDC->SetTextAlign(TA_CENTER);
pDC->TextOut(0, 0, bstr, bstr.length());
pDC->SelectObject(&OrigFont);
myFont.DeleteObject();
}

 

GDI+与GDI绘图函数的对比

 

       GDI+                            GDI                  备注

轮廓线        填充

DrawArc       -                         Arc                 圆弧

-             -                       AngleArc             线段和圆弧

-            -                        ArcTo                椭圆的圆弧

-            -                        Chord                圆弧和线段组成的半月形

DrawEllipse FillEllipse               Ellipse              圆和椭圆
DrawPie      FillPie                   Pie                  扇形
DrawLine     -                         LineTo MoveToEx      从现在位置开始到终点的直线

DrawLines    -                        Polyline PolyLineTo   一组线段组成的线段群

-            -                        PolyPolyline       一组线段群

DrawPolygon FillPolygon                Polygon               多边形

-            -                         PolyPolygon        一组多边形

DrawBezier  -                        -                 由 4个点定义的贝塞尔曲线

DrawBeziers   -                        PolyBezier PolyBezierTo 一个以上的贝塞尔曲线

DrawPath    FillPath                   FillPath               路径

DrawRectangle FillRectangle           Rectangle               矩形

DrawRectangles FillRectangles             -                 一组矩形

-            -                        RoundRect           圆弧端角的矩形

-             FillRegion              PaintRgn FillRgn    Region 内部填充

DrawString   -                          TextOut            字符串

DrawClosedCurve FillClosedCurve          -                 闭合 Curve曲线

DrawCurve     -                          -                Curve 曲线

DrawIcon      -                          -                在指定坐标处绘制由指定的 Icon 对象表示的图像。

DrawIconUnstretched -                    -               Icon 对象表示的图像,而不缩放该图像。

DrawImage        -                     StretchBlt StretchDIBits 在指定位置并且按原始大小绘制指定的 Image 对象

DrawImageUnscaled -                     BitBlt      在由坐标对指定的位置,使用图像的原始物理大小绘制指定的图像。

原创粉丝点击