WIN32 GDI+ 学习笔记(三):使用画刷(I)
来源:互联网 发布:普通票据打印软件 编辑:程序博客网 时间:2024/06/02 04:30
gdi+中的brush对象是用来填充一个封闭形状的内部,而且brush对象分为以下几种:
1.实心画刷
2.渐变画刷
3.阴影画刷
4.贴图画刷
5.路径画刷
(本文参考MSDN)
我们先认识一下前两种。
1.实心画刷(SolidBrush)
首先我们需要一个SolidBrush对象,其构造函数为SolideBrush(Color& color),所以我们只需要指定一种颜色就行了
例如:
SolidBrush b(Color(255,0,0));
graphics.FillRectangle(&b,10,10,100,100);
我们可以通过SetColor和GetColor方法来设置和获取画刷的颜色。
2.渐变画刷(LinearGradientBrush)
LinearGradientBrush可以让你用渐变色来填充一个封闭图形。其构造函数有:
LinearGradientBrush(Point& point1,Point& point2,Color& color1,Color& color2);
LinearGradientBrush(PointF& point1,PointF& point2,Color& color1,Color& color2);
LinearGradientBrush(Rect& rect, Color& color1, Color& color2, LinearGradientMode mode);
LinearGradientBrush(RectF& rect, Color& color1, Color& color2, LinearGradientMode mode);
LinearGradientBrush(Rect& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);
LinearGradientBrush(RectF& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);
可能你一下子看到这么多构造函数会有点晕,实际上只有三种不同的方法,现在来分别了解一下
1.LinearGradientBrush(Point& point1,Point& point2,Color& color1,Color& color2);
这个构造方法需要两个点,两种颜色,举个例子:
LinearGradientBrush b(Point(0,0),Point(500,250),Color(255,0,0),Color(0,0,255));
graphics.FillRectangle(&b,0,0,500,250);
另外,如果画刷所填充的形状超出了渐变的分界线,那么就会出现下面的效果:
2.LinearGradientBrush(Rect& rect, Color& color1, Color& color2, LinearGradientMode mode);
这个方法需要一个矩形,两种颜色,以及一个渐变模式,其中渐变模式LinearGradientMode是一个枚举类型,包括:
LinearGradientModeHorizontal = 0
LinearGradientModeVertical = 1
LinearGradientModeForwardDiagonal = 2
LinearGradientModeBackwardDiagonal = 3
效果如下:
3.LinearGradientBrush(Rect& rect, Color& color1,Color& color2, REAL angle,BOOL isAngleScalable = FALSE);
这个方法需要一个矩形,两种颜色,一个角度和一个标志,如果isAngleScalable为真那么会根据矩形来改变渐变的角度(详细信息请参见MSDN)
效果图:
渐变画刷也有很多的方法,我在这里介绍几种常用的:
1.SetBlend(REAL *blendFactors,REAL *blendPositions,INT count);
blendFactors是实数数组,里面的数字的值从0.0到1.0,代表两种颜色的混合程度,0.0表示100%起始色,1.0表示100%终止色,而blendPositions也是实数数组,里面的数字代表blendFactors中对应混合颜色的位置,从0.0到1.0,代表0%到100%。count表示blendFactors和blendPositions中的元素个数。
举个例子:
REAL factors[4] = {0.0f, 0.4f, 0.6f, 1.0f};
REAL positions[4] = {0.0f, 0.2f, 0.8f, 1.0f};
Rect rect(0, 0, 500, 250);
LinearGradientBrush linGrBrush(rect,Color(255, 0, 0), Color(0, 0, 255), LinearGradientModeHorizontal);
linGrBrush.SetBlend(factors, positions, 4);
graphics.FillRectangle(&linGrBrush, rect);
2.SetInterpolationColors(Color *presetColors,REAL *blendPositions,INT count);
如果觉得颜色不够多,那么我们可以用这个方法来添加更多的颜色。presetColors是颜色数组,里面按顺序定义你想要的颜色,blendPositions是实数数组,里面的数字从0.0到1.0说明presetColors中对应颜色的位置,count为元素个数。
举个例子:
Color colors[] = {
Color(255, 0, 0),
Color(0, 0, 255),
Color(0, 255, 0)};
REAL positions[] = {
0.0f,
0.3f,
1.0f};
LinearGradientBrush linGrBrush(
Point(0, 0),
Point(500, 0),
Color(0, 0, 0),
Color(0, 0, 0));
linGrBrush.SetInterpolationColors(colors, positions, 3);
graphics.FillRectangle(&linGrBrush, 0, 0, 500, 300);
3.SetWrapMode(WrapMode wrapMode);
用这个方法可以设置渐变区域平铺的模式,WrapMode为枚举类型,包括:
WrapModeTile = 0
WrapModeTileFlipX = 1
WrapModeTileFlipY = 2
WrapModeTileFlipXY = 3
WrapModeClamp = 4
效果如图:
关于画刷就先讲这么多。
- WIN32 GDI+ 学习笔记(三):使用画刷(I)
- WIN32 GDI+ 学习笔记(二):使用画笔
- WIN32 GDI+ 学习笔记(一):配置GDI+
- Win32 GDI基础(笔记)
- Win32 GDI基础(笔记)
- win32汇编语言学习笔记(三)
- Win32汇编学习笔记(三)
- GDI+学习笔记(三)绘制一张简单的图片
- GDI+学习笔记(六)渐变画刷
- Win32 GDI+ 学习笔记(一)之win32显示图片
- Gdi+学习笔记(一)
- Gdi+学习笔记(二)
- GDI+学习笔记(待续)
- GDI+学习笔记(一)
- win32 GDI 学习
- Win32 GDI 学习总结
- Win32程序使用GDI+
- GDI+学习笔记(二)GDI+的配置和初始化
- 编程挑战-进制转换
- GetParent获得的是父窗口的父窗口句柄
- LeetCode 4:《Median of Two Sorted Arrays》
- 随机读取文件的某些行
- Android中onInterceptTouchEvent(),Ontouch(),onTouchEvent()
- WIN32 GDI+ 学习笔记(三):使用画刷(I)
- webView与js交互
- hibernate通过配置文件和方法自动创建表。
- Android模拟器Genymotion安装向导(转载)
- ubuntu14.04 安装openyoudao
- 如何关闭MyEclipse的自动更新
- G_o_A_g_e_n_t不能使用解决方法
- VC包含目录、附加依赖项、库目录及具体设置
- 为什么String在Java中是不可变的