C++ GDI+ - 画刷、矩阵、基本绘图函数、文字、图像
更新时间:2024-01-04 15:31:01 阅读量: 教育文库 文档下载
- c t 阴性阳性推荐度:
- 相关推荐
C++ GDI+ 画刷、矩阵、基本绘图函数、文字、图像
主要画刷
单色画刷SolidBrush
SolidBrush(const Color& color ); 网格画刷HatchBrush
HatchBrush( HatchStyle hatchStyle, const Color& foreColor, const Color& backColor);
foreColor和backColor用来指定阴影线颜色和填充的背景颜色,背景色可以不指定。hatchStyle用来指定阴影线的样式。 预定义样式:
HatchStyleHorizontal (水平线) HatchStyleVertical(垂直线)
HatchStyleForwardDiagonal(上斜线) HatchStyleBackwardDiagonal(下斜线) HatchStyleCross(十字线)
HatchStyleDiagonalCross (交叉线) HatchStyle30Percent(30%填充) HatchStyleSolidDiamond (实心菱形) 直线渐变LinearGradientBrush
LinearGradientBrush( Point & point1, Point & point2, Color & color1, Color & color2);
LinearGradientBrush( Rect & rect, Color & color1, Color & color2, REAL angle, BOOL isAngleScalable );
LinearGradientBrush( Rect & rect, Color & color1, Color & color2, LinearGradientMode mode);
point1和point2分别用来指定矩形区域的左上角和右下角点坐标。 color1和color2分别用来指定 渐变起始和终止的颜色。
rect用来指定一个矩形区域的大小和位置,angle用来指定渐变的方向角度,正值为顺时针。
isAngleScalable是一个即将废除的参数。mode用来指定渐变的方法。 预定义样式:
LinearGradientModeHorizontal (水平方向) LinearGradientModeVertical (垂直方向)
LinearGradientModeForwardDiagonal (从左下到右上的对角线方向) LinearGradientModeBackwardDiagonal (从左上到右下的对角线方向)
路径渐变PathGradientBrush
PathGradientBrush( const GraphicsPath* path);
PathGradientBrush( const Point * points, INT count, WrapMode wrapMode);
path用来指定一个路径指针,points和count分别用来指定组成路径的一系列直线端点的数组及其大小, wrapMode是一个可选项,用
来指定填充的包围模式。一个包围模式用来决定是否在区域内部、在区域外部以及所有区域都填充。默认时,其值为 WrapModeClamp,即在区域内部填充。 图像画刷TextureBrush
TextureBrush(Image*, WrapMode);
矩阵
图形变换一般是对图形的几何信息经过几何变换后产生新的图形。常见二维图形的变换有平移、比例、对称、旋转、错切 等。图形几何变换最有效的手段是采用矩阵变换,GDI+就有这样的矩阵类Matrix,它为我们提供了许多变换的方法,如Invert(转置)、 Multiply(矩阵相乘)、Rotate(旋转)等。
需要说明的是,除了使用Matrix进行图形变换外,Graphics本身提供相应的变换方法,如RotateTransform(旋转变换)、
ScaleTransform(比例变换)和TranslateTransform(平移变换)等。
基本绘图函数
绘图函数 功能描述
DrawArc 绘制一条圆弧曲线,范围由起止角大小决定,大小由矩形或长宽值指定
DrawBezier 绘制一条由一系列型值顶点决定的三次Bezier曲线 DrawBeziers 绘制一系列的三次Bezier曲线
DrawClosedCurve 绘制一条封闭的样条曲线 DrawCurve 绘制一条样条曲线
DrawEllipse 绘制一条椭圆轮廓线,大小由矩形或长宽值指定 DrawLine 绘制一条直线
DrawPath 绘制由GraphicsPath定义的路径轮廓线 DrawPie 绘制一条扇形(饼形)轮廓线 DrawPolygon 绘制一个多边形的轮廓线 DrawRectangle 绘制一个矩形 FillEllipse 填充一个椭圆区域 FillPath 填充一个由路径指定的区域 FillPie 填充一个扇形(饼形)区域 FillPolygon 填充一个多边形区域 FillRectangle 填充一个矩形区域
FillRectangles 用同一个画刷填充一系列矩形区域 FillRegion 填充一个区域(Region)的内部
文字
Font( FontFamily* , REAL , INT , Unit ) 字体的主要构造函数 FontFamily fontFamily(L\幼圆\//定义字型
Font font(&fontFamily, 12, FontStyleRegular, UnitPoint); //定义字体
FontFamily * : 指向用来定义字型的类的指针。
REAL : 字号,这里的字号可以使用小数定义。而且字号的单位也是由第4个参数指定的。
INT : 字体风格,FontStyleRegular(正常)、FontStyleBold(加粗)、 FontStyleItalic(斜体)、FontStyleBoldItalic (粗斜体)、FontStyleUnderline(下划线) 和FontStyleStrikeout(删除线)。 Unit : GDI+为用户提供了UnitDisplay(1/75英寸)、UnitPixel(像素)、UnitPoint(点)、UnitInch(英寸)、UnitDocument(1/300英寸)、UnitMillimeter(毫米)等字体尺寸单位。 为了兼容GDI 字体还有其他的几个构造函数
Font( HDC hdc, const LOGFONTW* logfont) 是其中比较常用的构造函数之一,可以看出是完全与GDI兼容的。 GDI+只有一个输出文本的函数DrawString,原型如下
DrawString( const WCHAR* string, INT length, const Font* font, const RectF& layoutRect, const StringFormat* stringFormat, const Brush* brush );
DrawString( const WCHAR* string, INT length, const Font* font, const PointF& origin, const Brush* brush );
DrawString( const WCHAR* string, INT length, const Font* font, const PointF& origin, const StringFormat* stringFormat, const Brush* brush);
其中,string用来指定要输出的字符串,length表示该字符串的长度,font用来指定字体, layoutRect用来指定一个字符串所输出的矩形
区域,stringFormat用来指定文本输出格式化属性,origin用来指定字符串输出的起 点。需要注意的是,PointF和RectF类与Point和Rect类基本相同,所不同的是数据类型是浮点而后者是INT型。brush用来指定一个画 刷,这个画刷既可以是SolidBrush和HatchBrush,也可以是TextureBrush(纹理画刷),甚至是渐变画刷。
在GDI+中,我们还可以通过SetTextRenderingHint来控制文本输出的质量。
文本的格式属性通常包括对齐方式、字符间隔以及文本调整等。GDI+提供StringFormat类来控制这些格式属性,通常我们调用以下几个函数来进行相关属性设置。
Status SetAlignment ( StringAlignment align ); Status SetLineAlignment ( StringAlignment align ); 上面的两个函数是用来定义文本对齐方式的,align可以是
StringAlignmentNear(左对齐或右对齐,取决于书写方向是从左到右还是从右到左)、StringAlignmentCenter(居中)或StringAlignmentFar(两端对齐)。 Status SetFormatFlags( INT flags );
该函数用来设置文本格式化标志,flags可以是
StringFormatFlagsDirectionRightToLeft (水平阅读方向是从右向左) 和
StringFormatFlagsDirectionVertical(垂直文本)等值。
图像
GDI+的Image类封装了对BMP、GIF、JPEG、PNG、TIFF、WMF(Windows元文件)和 EMF(增强WMF)图像文件的调入、格式转换以及简单处理的功能。而Bitmap是从Image类继承的一个图像类,它封装了Windows位图操作的常用功能。例如,Bitmap::SetPixel和Bitmap::GetPixel分别用来对位图进行读写像素操作,从而可以为图像的柔化和锐化处理提供一种可能。
Metafile类别通过提供记录和检验矢量图像的其它方法,增强Image类别的功能。
DrawImage是GDI+的Graphics类显示图像的核心方法,它的重载函数有许多个。常用的一般重载函数有: Status DrawImage( Image* image, INT x, INT y); Status DrawImage( Image* image, const Rect& rect);
Status DrawImage( Image* image, const Point* destPoints, INT count);
Status DrawImage( Image* image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit);
其中,(x,y)用来指定图像image显示的位置,这个位置和image图像的左上角点相对应。rect用来指定被图像填充的矩形区域, destPoints和count分别用来指定一个多边形的顶点和顶点个数。若count为3时,则表示该多边形是一个平行四边形,另一个顶点由系统自动给出。此时,destPoints中的数据依次对应于源图像的左上角、右上角和左下角的顶点坐标。srcx、srcy、srcwidth 和srcheight用
来指定要显示的源图像的位置和大小,srcUnit用来指定所使用的单位,默认时使用PageUnitPixel,即用像素作为度量单位。 需要注意的是,在不指定范围的情况下,DrawImage会拉伸图像铺满整个设备。
Image还提供GetThumbnailImage的方法用来获得一个缩略图的指针,调用DrawImage后可将该缩略图显示,这在图像预览时极其有用。
Status DrawImage( Image* image, const Point* destPoints, INT count);
里面的destPoints和count用来指定一个数组和数组的大小。这个重载可以用来旋转图像。destPoints中的第一个点是用来定义坐标原点的,第二点用来定义X轴的方法和图像X方向的大小,第三个是用来定义Y轴的方法和图像Y方向的大小。若destPoints定义的新坐标系中两轴方向不垂直,就能达到图像拉伸的效果。当然,对于图像旋转还可直接使用Graphics::RotateTransform来进行,例如下面的代码。但这样设置后,以后所有的绘图结果均会旋转,有时可能感觉不方便。
当图像进行缩放时,需要对图像像素进行插补,不同的插补算法其效果是不一样的。Graphics:: SetInterpolationMode可以让我们根据自己的需要使用不同质量效果的插补算法。当然,质量越高,其渲染时间越长。
正在阅读:
C++ GDI+ - 画刷、矩阵、基本绘图函数、文字、图像01-04
江口中学食品卫生安全管理规章制度05-31
专题05 阅读理解(科普文章)-2018年高考英语母题题源系列(解析版)02-02
智力测验完06-18
热力管道焊接技术交底02-27
坚持稳中求进总基调 推进工作向纵深发展02-23
新人教版五年级下册数学第五 - 六单元导学案 - 图文12-30
中国明朝档案总汇-袁姓05-01
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- C++
- 矩阵
- 绘图
- 函数
- 图像
- 文字
- 基本
- GDI
- 文明礼仪
- 关于中医专业学生做好中西医两方面学习的思考
- 关于《广告策划与创意》教学模式与实践改革的思考-2019年教育文档
- 社会资源进入行业医院职工思想政治工作创新
- 高中物理72功教案3新人教版必修2 - 图文
- 广东省揭阳市中考化学试卷(word版)
- 酶标仪验证文件
- 贵州出版社三年级上册健康教育教案 - 图文
- 2018-2019-乡镇(街道)武装部长述职报告-述职报告(精选多篇)-范文word版(11页)
- 如何在食物网中判断某种群的数量变化情况
- 6-3-1 - 工程问题 题库教师版
- 英语专四语法练习
- 企业组织机构与部门设置说明
- 企业社会责任理想模型的构建
- 《麦肯锡方法论》笔记精要
- 广东省2017年中考化学 第2部分 专题突破 专题二 物质的转化与推断题课时作业
- 2018年国际经济法形考任务1-5答案
- 八年级物理下册全册教案(教科版)
- 高中生经典阅读的现状与对策论文
- 三鼓成型机与两鼓成型机比较