GdiPlus基础入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GdiPlus基础入门
GDIPlus 基础入门
步骤一:添加头文件,头文件名称为gdiplus.h并且一般创建的工程中已经包含在stdafx.h中.
步骤二:添加链接库,有两种方法.
方法一:工程设置添加.VC6和VS2010差不多.
方法二:#pragma comment(lib,”gidplus.lib”).
步骤三:在应用程序类的头文件中添加几个变量.
ULONG_PTR m_gdiplusToken;
Gidplus::GdiplusStartupInput StartUpInput;
步骤四:首先在APP类的InitInstance函数中添加:
Gdiplus::GdiplusStartup(&m_gdiplusToken,& StartUpInput,NULL);
步骤五:然后在ExitInstance函数中添加:
Gdiplus::GdiplusShutdown(m_gdiplusToken);
步骤六:在文件开始声明using namespace Gdiplus;
画刷和画笔简单介绍
Graphics graphics(GetDC()->m_hDC); //初始化一个对象
Pen NewPen(Color(255,0,0),3); //创建一个红色,宽度为3的画笔. HatchBrush
NewBrush(HatchStyleCross,Color(0,255,0),Color(0,0,255)); graphics.DrawRectangle(&NewPen,50,50,100,100); //画一个矩形框graphics.FillRectangle(&NewBrush,50,50,100,100); //画刷填充矩形PS:下图就是结果了,可以看到外围是红色的笔,内部是绿色和蓝色来填充的,并且是交叉的效果.那是因为上面设置了HatchStyleCross了, 可以根据实际的要求来设置不同效果的画刷.
画笔
画笔的风格可以根据SetDashStyle和SetDashPattern两个函数设置. ○1SetDashStyle函数中设置的风格都是系统自己设置的. Graphics graphics(GetDC()->m_hDC);
Pen NewPen(Color(255,0,0),10);
NewPen.SetDashStyle(DashStyleDash); //虚线效果
NewPen.SetDashStyle(DashStyleDot); //点线效果
NewPen.SetDashStyle(DashStyleDashDot); //点划线效果NewPen.SetDashStyle(DashStyleSolid); //实线
NewPen.SetDashStyle(DashStyleDashDotDot); //双点线
对应的效果图如下:
○2SetDashPattern函数可以设置我们自己设计的风格.代码如下: Pen pen(Color(255,0,0),10);
REAL dashVal1[4] = {1,2,3,4};
REAL dashVal2[6] = {1,2,3,4,5,6};
pen.SetDashPattern(dashVal1,4);
graphics.DrawLine(&pen,100,100,500,100);
pen.SetDashPattern(dashVal2,6);
graphics.DrawLine(&pen,100,140,500,140);
可以看到,自定义的效果就是,一个数字用于画线,一个数字用于间隔.
○3设置线条的开始处和结尾处的风格.
Pen pen(Color(255,0,0),10);
pen.SetStartCap(LineCapFlat);
pen.SetEndCap(LineCapSquare);
pen.SetStartCap(LineCapRound);
pen.SetEndCap(LineCapRoundAnchor);
pen.SetStartCap(LineCapDiamondAnchor);
pen.SetEndCap(LineCapArrowAnchor);
效果如下,只是在线段的头部和尾部有了变化.
画刷
○1HatchBrush(HatchStyle hatchStyle,const Color& foreColor,const Color& backColor);HatchStyle取值与效果图依次如下: HatchStyleHorizontal(水平),HatchStyleVertical(垂直线) HatchStyleForwardDiagonal(上斜线), HatchStyleBackwardDiagonal(下划线)
HatchStyleCross(十字线),HatchStyleDiagonalCross(交叉线) HatchStyle30Percent(30%填充),HatchStyleSolidDiamond(实心菱形)
○2直线渐变画刷.
LinearGradientBrush(Rect &rect,Color& color1,Color&
color2,LinearGradientMode mode);mode取值和效果图依次如下: LinearGradientModeHorizontal,LinearGradientModeVertical, LinearGradientModeForwardDiagonal
LinearGradientModeBackwardDiagonal
○2路径渐变PathGradientBrush(const GraphicsPath *path),范例如下: Graphics graphics(GetDC()->m_hDC);
GraphicsPath path;
path.AddEllipse(50,50,200,200); //画一个路径图PathGradientBrush pathBrush(&path);//以路径图构造一个画刷pathBrush.SetCenterColor(Color(255,0,0));//设置中心颜色. graphics.FillRectangle(&pathBrush,50,50,200,200);//渐变效果如下
○3路径函数和路径画刷的综合应用
Graphics graphics(GetDC()->m_hDC);
Pen pen(Color::Blue,3); //构造画笔
Point
pt1(50,200),pt2(100,150),pt3(160,180),pt4(200,200),pt5(230,150) pt6(220,50),pt7(190,70),pt8(130,220); //构造若干点
Point curvePoints[8] = {pt1,pt2,pt3,pt4,pt5,pt6,pt7,pt8};
Point *pCurve = curvePoints;
GraphicsPath = path;
path.AddClosedCurve(curvePoints,8,0.5); //以上述若干点构造路径PathGraphicsBrush brush(&path); //以路径构造画刷Brush.SetCenterColor(Color(0,0,255)); //设置中心颜色
graphics.DrawClosedCurve(&pen,curvePoints,0,0.5);//绘制路径图外围graphics.FillPath(&brush,&path); //填充路径图内部
画图
○1DrawImage函数用来可以画图,包括BMP,GIF,JPEG,PNG,TIFF,WMF Status DrawImage(Image *image,INT x,INT y);
Status DrawImage(Image *image,INT x,INT y,INT srcx,INT srcy,INT srcwidth,INT srcheight,Unit srcUnit);
其中第2个函数可以用来实现一切特殊的效果.
○2GetThumbnailImage可以获得缩略图的指针.
Image image(L“ImageName”);
Image *pThumbnail = image.GetThumbnailImage(50,50,NULL,NULL)
graphics.DrawImage(pThumbnail,20,20);//在20,20点处显示缩略图. ○3旋转的方法
Point newPoints[] = {Point(x1,y1),Point(x2,y2),Point(x3,y3)}; graphics.DrawImage(ℑ,newPoints,3);
还有另外一个方法,利用移动坐标原点,和旋转角度来实现. graphics.TranslateTransform(x1,y1); //转换(0,0)到(x1,y1) graphics.RotateTransform(30); //顺时针旋转30度
graphics.DrawImage(ℑ,0,0); //显示图片.
○4利用SetInterpolationMode来设置效果的补差.
graphics.SetInterpolationMode(InterpolationModeNearestN eighbor);
graphics.SetInterpolationMode(InterpolationModeHighQualityB ilinear)
graphics.SetInterpolationMode(InterpolationModeHighQualityB icubic);
CImage
○1使用CImage首先要包含#include 头文件,然后Load. CImage image;
image.Load(“ImageName”);
image.Draw(pDC->m_hDC,0,0);
○2CImage::Save方法可以把图像保存成另一种文件格式. HRESULT Save(LPCTSTR pszFileName,REFGUID guidFileType = NULL); guidFileType为空的时候就是默认的文件格式.还有其他格式: GUID_BMPFile(BMP格式),GUID_PNGFile(PNG格式),
GUID_JPEGFile(JPEG格式),GUID_GEFFile(GIF格式),
○3转换成黑白颜色
if(!image.IsIndexed())
{
COLOREF pixel;
byte r,g,b,avg;
for(int x=0;xGetHeight();x++)
{
for(int y=0;yGetWidth();jj++)
{
r=GetRValue(pixel);
g=GetGValue(pixel);
b=GetBValue(pixel);
avg=(int)((r+g+b)/3);
image->SetPixelRGB(x,y,avg,avg,avg);
}
}
}
else
{
int max=image->GetMaxColorTableEntrise(); RGBQUAD *ColorT able=new RGBQUAD[max]; Image->GetColorT able(0,max,ColorTable); for(int ii=0;ii<max;ii++)< p="">
{
int avg=(ColorTable[i].rgbBlue+…)/3; ColorTable[i].rgbBlue=avg;
…
}
image->SetColorT able(0,max,ColorTable); delete ColorTable;
}
</max;ii++)<>。