65.9K
CodeProject 正在变化。 阅读更多。
Home

CGradientRender

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.75/5 (25投票s)

2005年8月17日

CPOL

2分钟阅读

viewsIcon

50386

downloadIcon

2029

一篇关于使用 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 中执行。

关注点

在研究这些材料时,我发现了一个有趣的研究领域。 几乎任何图像变换都可以应用在这里(即使是颜色变换,这里没有测试),并且欢迎大家尝试。

© . All rights reserved.