H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-06 #1 如题,希望有好的答案。 注:不要XOR方式的,因为我要覆盖的画。
卷 卷起千堆雪tyn Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-06 #2 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; 是不是这个意思?
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; 是不是这个意思?
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-06 #3 卷起千堆雪tyn: 谢谢你又来光顾我的问题。不过我不是这个意思。 比如我要的画笔是要下面的图形: ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● 黑点为填充图案,但空白部分要透明,不能遮住后面的图形。 另外你那个打印程序什么也打不出来,我改了半天,还是有问题,我 都觉得古怪。我一会再去看看。http://www.delphibbs.com/delphibbs/DispQ.asp?LID=710977
卷起千堆雪tyn: 谢谢你又来光顾我的问题。不过我不是这个意思。 比如我要的画笔是要下面的图形: ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● ●●●●●●●● 黑点为填充图案,但空白部分要透明,不能遮住后面的图形。 另外你那个打印程序什么也打不出来,我改了半天,还是有问题,我 都觉得古怪。我一会再去看看。http://www.delphibbs.com/delphibbs/DispQ.asp?LID=710977
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-09 #7 嘿嘿 刚刚研究过这种问题 不算完美的解决方案: 现在一块bitmap里用普通的位图刷子画好图形,用白色作为透明色,然后tansparentblt贴到 需要的canvas上
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #8 BornKilled: 有道理,不过只能填充矩形或者背景,多边形怎么办呢?
H htw Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #9 自己定义白色或才其它为透明色, 其它颜色为不透明 或者定义一个阈值, 判断灰度=(R+G+B)/3(或用其它灰度计算公式)大于此阈值时 才将该颜色与背景叠加,否则不叠加就行了。
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #10 htw: 能否举例说说怎样用位图(带透明色)填充地画一个简单的如四边形?
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #11 huzzz: 多边形也一样啊,没有什么区别 transparentblt的时候所有的白色都变成透明的了,实际上就是没有blt过去 多边形的外部的背景色也是白色不就行了 也可以定义别的颜色为背景色
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #13 to BornKilled: 明白了,你那个BITMAP不是用来做画刷,而是先在内存中缓冲,把多边形画在 里面。 这确实不太完美,因为要耗内存,对于大区域画图(如高分辨率的打印输出) 则可能系统资源耗尽,另外还要跟源图保持相同的视图映射和窗口设置,而且不 能输出真正的矢量图。不过也不失为一种解决方法。 另外也可以用NOTXOR或XOR方式,缺点是满足不了覆盖要求,花花绿绿的。
to BornKilled: 明白了,你那个BITMAP不是用来做画刷,而是先在内存中缓冲,把多边形画在 里面。 这确实不太完美,因为要耗内存,对于大区域画图(如高分辨率的打印输出) 则可能系统资源耗尽,另外还要跟源图保持相同的视图映射和窗口设置,而且不 能输出真正的矢量图。不过也不失为一种解决方法。 另外也可以用NOTXOR或XOR方式,缺点是满足不了覆盖要求,花花绿绿的。
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-10 #14 说对了 没有透明刷子的时候只好用这个替代 Xor实现不了的
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-12 #15 提前一点,是不是可以认为:这样的画刷是无法实现的呢?但我看过一些软件是可以的, 不知道它们是怎么做的(该不会连填充算法都是自己写吧)。
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-12 #16 我可以肯定的告诉你 mapinfo和arc/info等地理信息软件都是自己做填充的
B BornKilled Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-12 #18 ........................ 我也有过和你同样的想法..............
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-13 #19 再等等,有没有其它意见。如果没有我只好结束。 请大家发表看法,是不是不自己写填充算法就无法实现带透明色的自定义填充? 其实WINDOWS自带的几种填充就是有透明的,有没有人知道它是怎么弄的? 有好的回答我可以另外开贴加分(并不一定要解决问题)。
再等等,有没有其它意见。如果没有我只好结束。 请大家发表看法,是不是不自己写填充算法就无法实现带透明色的自定义填充? 其实WINDOWS自带的几种填充就是有透明的,有没有人知道它是怎么弄的? 有好的回答我可以另外开贴加分(并不一定要解决问题)。
H Huzzz Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #20 没有人回答,那就结束吧。我个人的看法是:应该有办法实现的。 WINDOWS是支持透明画刷的(它自带的HATCHBRUSH就是),只是我还要路慢慢上下探索。