CGradientRender
一篇关于使用 CGradientRender 类绘制渐变的教程。
 
 
 
 
 
 
 
 
引言
大多数程序员使用 Windows SDK 函数 GradientFill 来绘制水平或垂直线性渐变或三角形渐变。 此外,CodeProject 上也可以找到对角线渐变的类。 但是自定义渐变呢? 或者实验性渐变呢? 本文介绍了一个用于绘制此类渐变的类。 它的功能尚未经过严格测试,也没有错误,因此在使用时请记住这一点。
背景
人们可以在整个 Internet 上找到关于渐变的各种文章,并且在 CodeProject 上也可以找到非常好的示例。
使用代码
要使用 CGradientRender 类,请包含提供的头文件 "GradientRender.h" 并创建此类的实例。
#include "GradientRender.h"
CGradientRender gradientRender;
现在,这个类只有一个公共方法,名为 DrawGradient,所以像下面的例子一样调用这个方法
// hDC is a destination device context (i.e. screen device context) RECT rect = {100, 100, 300, 300}; // gradient rectangle COLORREF startColor = RGB(0,0,255); // start gradient color COLORREF endColor = RGB(255,0,0); // end gradient color gradientRender.DrawGradient(hDC,rect,startColor, endColor,GRADIENT_HORIZONTAL,TRANSFORMATION_NONE);
最后两个参数是渐变的类型和变换的类型。 如果变换的类型是 TRANSFORMATION_NONE,则该类可以执行五个基本渐变类型的绘制
- 水平渐变 (GRADIENT_HORIZONTAL)
- 垂直渐变 (GRADIENT_VERTICAL)
- 正向对角线渐变 (GRADIENT_FDIAGONAL)
- 反向对角线渐变 (GRADIENT_BDIAGONAL)
- 径向渐变 (GRADIENT_RADIAL)
此外,使用某种类型的变换,结果可能会有所不同。 这是自定义和实验的领域。 当前的转换如下所示
- 无变换 (TRANSFORMATION_NONE)
- 漫画变换 (TRANSFORMATION_CHARICATURE)
- 鱼眼变换 (TRANSFORMATION_FISHEYE)
- 漩涡变换 (TRANSFORMATION_SWIRLED)
- 圆柱变换 (TRANSFORMATION_CYLINDER)
- 平移变换 (TRANSFORMATION_SHIFT)
基本上,这六种变换是在五种不同类型的渐变上执行的。 现在有 30 种组合。 有些很好,有些甚至更好。 但是,必须试验变换的参数才能获得自定义结果,或者添加一种新的变换,这将是最好的。 所有变换都在 CGradientRender 类的私有方法 ApplyTransformation 中执行。
关注点
在研究这些材料时,我发现了一个有趣的研究领域。 几乎任何图像变换都可以应用在这里(即使是颜色变换,这里没有测试),并且欢迎大家尝试。




