+ -
当前位置:首页 → 问答吧 → 高分求教,关于画刷的问题……

高分求教,关于画刷的问题……

时间:2011-11-18

来源:互联网

在一个DC上填充了一块区域,产生画刷和填充的代码如下:
Delphi(Pascal) code

var
  b:TLogBrush;        
  Brush : HBRUSH;
begin
  b.lbStyle:=0;           
  b.lbColor:=clBlue;
  b.lbHatch:=1;
  Brush := CreateBrushIndirect(b);
  SelectObject(DC,Brush);
  Rectangle(DC, Space, Space, cWidth, CHeight );
end;


效果如下所示(左图):

效果地址,好像不能正常显示
http://hi.csdn.net/attachment/201111/17/300306_13215725335t9T.jpg
我需要实现右边的效果,我分析应该是通过加一个画刷蒙版的方式实现的
因为这个颜色是可以设置变化的
网上有一下加画刷蒙版的代码,不是太看的懂
求教有经验的高手了…………
谢谢

作者: bduren   发布时间: 2011-11-18

线性渐变画刷就可以
http://houke2004.blog.163.com/blog/static/20863165200952525747443/

作者: funxu   发布时间: 2011-11-18

谢谢
线性画刷明显从一种颜色到另一种颜色的渐变
但我上面的图例应该是从一种颜色向透明的渐变
网上找很多,感觉用画刷蒙版实现比较好

当然了,只要实现效果就可以了

晚上回去试一下您给的参考,再次现感谢了

期待还有人能够指点一二了!

作者: bduren   发布时间: 2011-11-18

白色到蓝色渐变不行么?

作者: funxu   发布时间: 2011-11-18

建议参考JVCL控件中,比如jvGradientHeaderPanel,Gradient相关的属性,看看他的实现源码

作者: Avan_Lau   发布时间: 2011-11-18

封装得很好,可以直接使用JVCL中的TJvGradient

作者: Avan_Lau   发布时间: 2011-11-18

晕倒,你这样写要实现右边的效果是不可能的。按照下面写,你可以调整参数实现你自己的效果:
Delphi(Pascal) code

如果你的高度小于255
y1 := Space;
y2 := Space;
for i:=0 to CHeight do
begin
  b.lbColor:=RGB(0, 255 - i, 0);
  ...
  y2 = Space + i;
  Rectangle(DC, Space, y1, cWidth, y2 + i);
  y1 = y2;

end;

作者: AnSunny   发布时间: 2011-11-18

谢谢各位

因为颜色是要让用户设置的

所以类似 b.lbColor:=RGB(0, 255 - i, 0); 这样的代码应该不太可能

还有,应该不会用 for 循环实现,因为效率较低,量大的时候(很多个这个控件) 程序的反应速度会很低

必须一次性绘制

继续坐等各位的指点

再次感谢了

作者: bduren   发布时间: 2011-11-18

再次求教高手了

作者: bduren   发布时间: 2011-11-18

使用GDI+的 TGpLinearGradientBrush

作者: mdejtod   发布时间: 2011-11-18

var gBrush : TGpBrush;
  gp : TGpGraphics;
  r : TGpRect;
begin
  gBrush := TGpLinearGradientBrush.Create(FRect,ARGBFromCOLORREF(FAlphas,color1), ARGBFromCOLORREF(FAlphaE,color2),lmHorizontal);
  gp := TGpGraphics.Create(dc);
  gp.FillEllipse(gBrush,r);
  freeandnil(gBrush);
  freeandnil(gp);
end;

作者: mdejtod   发布时间: 2011-11-18

FAlphas
为颜色透明度

作者: mdejtod   发布时间: 2011-11-18

惭愧,我只会for循环,我也很想知道能一次绘制的

作者: kaikai_kk   发布时间: 2011-11-18

再次谢谢各位,现在电脑没有环境,晚上回去试一下

再次期待更多的高手出现……

作者: bduren   发布时间: 2011-11-18