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
中执行。
关注点
在研究这些材料时,我发现了一个有趣的研究领域。 几乎任何图像变换都可以应用在这里(即使是颜色变换,这里没有测试),并且欢迎大家尝试。