Delphi中如何自定义具有透明色的位图填充模式的画刷?(100分)

  • 主题发起人 主题发起人 Huzzz
  • 开始时间 开始时间
H

Huzzz

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,希望有好的答案。
注:不要XOR方式的,因为我要覆盖的画。
 
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('MyBitmap.bmp');
Form1.Canvas.Brush.Bitmap := Bitmap;
Form1.Canvas.FillRect(Rect(0,0,100,100));
finally
Form1.Canvas.Brush.Bitmap := nil;
Bitmap.Free;
end;

end;

是不是这个意思?
 
卷起千堆雪tyn:
谢谢你又来光顾我的问题。不过我不是这个意思。
比如我要的画笔是要下面的图形:

●●●●●●●●
●●●●●●●●
●●●●●●●●
●●●●●●●●
●●●●●●●●
●●●●●●●●

黑点为填充图案,但空白部分要透明,不能遮住后面的图形。
另外你那个打印程序什么也打不出来,我改了半天,还是有问题,我
都觉得古怪。我一会再去看看。http://www.delphibbs.com/delphibbs/DispQ.asp?LID=710977
 
提前,请前辈们指导,或者你们是怎样处理类似情况的。
 
再提前,不要让我等太久
 
嘿嘿
刚刚研究过这种问题
不算完美的解决方案:
现在一块bitmap里用普通的位图刷子画好图形,用白色作为透明色,然后tansparentblt贴到
需要的canvas上
 
BornKilled:
有道理,不过只能填充矩形或者背景,多边形怎么办呢?
 
自己定义白色或才其它为透明色, 其它颜色为不透明
或者定义一个阈值, 判断灰度=(R+G+B)/3(或用其它灰度计算公式)大于此阈值时
才将该颜色与背景叠加,否则不叠加就行了。
 
htw:
能否举例说说怎样用位图(带透明色)填充地画一个简单的如四边形?
 
huzzz:
多边形也一样啊,没有什么区别
transparentblt的时候所有的白色都变成透明的了,实际上就是没有blt过去
多边形的外部的背景色也是白色不就行了
也可以定义别的颜色为背景色
 
to BornKilled:
明白了,你那个BITMAP不是用来做画刷,而是先在内存中缓冲,把多边形画在
里面。
这确实不太完美,因为要耗内存,对于大区域画图(如高分辨率的打印输出)
则可能系统资源耗尽,另外还要跟源图保持相同的视图映射和窗口设置,而且不
能输出真正的矢量图。不过也不失为一种解决方法。
另外也可以用NOTXOR或XOR方式,缺点是满足不了覆盖要求,花花绿绿的。
 
说对了
没有透明刷子的时候只好用这个替代
Xor实现不了的
 
提前一点,是不是可以认为:这样的画刷是无法实现的呢?但我看过一些软件是可以的,
不知道它们是怎么做的(该不会连填充算法都是自己写吧)。
 
我可以肯定的告诉你
mapinfo和arc/info等地理信息软件都是自己做填充的
 
呜~~ :(
我不活了
 
........................
我也有过和你同样的想法..............
 
再等等,有没有其它意见。如果没有我只好结束。

请大家发表看法,是不是不自己写填充算法就无法实现带透明色的自定义填充?
其实WINDOWS自带的几种填充就是有透明的,有没有人知道它是怎么弄的?

有好的回答我可以另外开贴加分(并不一定要解决问题)。
 
没有人回答,那就结束吧。我个人的看法是:应该有办法实现的。

WINDOWS是支持透明画刷的(它自带的HATCHBRUSH就是),只是我还要路慢慢上下探索。
 
后退
顶部