求教:不规则窗体中的为什么会变透明?
我想做一个圆角矩形的窗体,用BMP画了个背景,四个角用青色填充,在OnLoad里加入如下代码:
Bitmap bm = this.BackgroundImage as Bitmap;
bm.MakeTransparent(bm.GetPixel(0,0));
this.TransparencyKey = bm.GetPixel(0,0);
实现了四个角的透明,可窗体上label,button等控件上的文字也变成透明的了(如果是有背景的button则正常),是我用的方法不对吗?应该如何更改?
先谢过大家了!
问题点数:30、回复次数:25Top
1 楼Knight94(愚翁)回复于 2006-09-25 13:01:04 得分 0
to 可窗体上label,button等控件上的文字也变成透明的了(如果是有背景的button则正常),是我用的方法不对吗?应该如何更改?
修改label和button上的背景颜色,不要和TransparencyKey 的颜色一样即可。Top
2 楼kissknife(侧身向南边)回复于 2006-09-25 13:03:11 得分 0
Knight94(愚翁)正解.....
Top
3 楼viena(维也纳N02)回复于 2006-09-25 13:05:30 得分 0
Knight94(愚翁)正解.....Top
4 楼NightShadows()回复于 2006-09-25 13:06:33 得分 0
to 修改label和button上的背景颜色,不要和TransparencyKey 的颜色一样即可。
我的字体设的是黑色,label的背景色是Transparent,我把label的背景设成其他颜色还是一样的结果,文字是透明的
Top
5 楼NightShadows()回复于 2006-09-25 13:07:54 得分 0
难道要给每个label设置image不成?Top
6 楼Knight94(愚翁)回复于 2006-09-25 13:10:49 得分 0
to 我的字体设的是黑色,label的背景色是Transparent,我把label的背景设成其他颜色还是一样的结果,文字是透明的
修改修改label和button上的forecolorTop
7 楼Knight94(愚翁)回复于 2006-09-25 13:11:38 得分 25
你的现象可能是穿透色为黑色,所以把label和button上的forecolor不要设置为黑色。Top
8 楼NightShadows()回复于 2006-09-25 13:17:32 得分 0
to Knight94(愚翁)
你说的对,字体设成其他色就可以了,可为什么我的穿透色会变成黑色呢?我的图片的四个角都是青色的,我设的是图片(0,0)位置的颜色为透明色,我在FORM属性里选的也是透明色也是青色,而且从运行结果看我的图片四角也变透明了,
为什么也变成透明色了?Top
9 楼NightShadows()回复于 2006-09-25 13:19:22 得分 0
为什么黑色也变成透明色了?
Top
10 楼Knight94(愚翁)回复于 2006-09-25 13:20:07 得分 0
你最好看看TransparencyKey的值是什么Top
11 楼viena(维也纳N02)回复于 2006-09-25 13:38:44 得分 5
(0,0)点就是黑色吧Top
12 楼NightShadows()回复于 2006-09-25 13:43:48 得分 0
执行
bm.MakeTransparent(bm.GetPixel(0,0));
后,图像四角变成了黑色,给TransparencyKey赋值就成了黑色,所以黑色就变透明了。
MakeTransparent不是使指定颜色对此bitmap透明吗?怎么会把那个颜色变成黑色呢?不用这条语句图片四角又不会透明,有什么办法可以解决吗?
多谢了Top
13 楼NightShadows()回复于 2006-09-25 13:58:21 得分 0
请大家指教Top
14 楼NightShadows()回复于 2006-09-25 14:01:52 得分 0
没有办法吗?Top
15 楼Knight94(愚翁)回复于 2006-09-25 14:04:13 得分 0
change
Bitmap bm = this.BackgroundImage as Bitmap;
bm.MakeTransparent(bm.GetPixel(0,0));
this.TransparencyKey = bm.GetPixel(0,0);
with
Bitmap bm = this.BackgroundImage as Bitmap;
this.TransparencyKey = bm.GetPixel(0,0);Top
16 楼NightShadows()回复于 2006-09-25 14:11:15 得分 0
to Knight94(愚翁)
可是我如果不写bm.MakeTransparent(bm.GetPixel(0,0));运行时会显示青色的四个色,不会变成透明
多谢你耐心的回答,即使最终不能解决我也要把分加给你,多谢了。Top
17 楼NightShadows()回复于 2006-09-25 14:13:23 得分 0
顶一下Top
18 楼NightShadows()回复于 2006-09-25 14:17:24 得分 0
顶Top
19 楼Knight94(愚翁)回复于 2006-09-25 14:20:34 得分 0
to 可是我如果不写bm.MakeTransparent(bm.GetPixel(0,0));运行时会显示青色的四个色,不会变成
透明
为什么一定需要这一句
bm.MakeTransparent(bm.GetPixel(0,0));
transparentkey不是已经设定了穿透颜色,它会进行过滤的。Top
20 楼NightShadows()回复于 2006-09-25 14:35:59 得分 0
是啊,可是transparentkey有个BUG,在非24位模式下会不正常
我是按http://www.microsoft.com/china/MSDN/library/netFramework/netframework/WindowsForms.mspx?mfr=true
这篇文章写的程序,结果就是上面那样,黑色变成了透明色Top
21 楼NightShadows()回复于 2006-09-25 14:47:02 得分 0
看起来只能用这个方法了:
http://allancandy.cnblogs.com/archive/2005/09/01/227814.html
多谢各位,告别是Knight94(愚翁) ,多谢了。Top
22 楼Knight94(愚翁)回复于 2006-09-25 14:51:27 得分 0
那你可以如下试试:
Bitmap bm = this.BackgroundImage as Bitmap;
bm.MakeTransparent(bm.GetPixel(0,0));
Bitmap bitNew = new Bitmap( bm.Width, bm.Height );
Graphics g = Graphics.FromImage( bitNew );
g.FillRectangle( Brushes.White/* Set transparent color here*/, 0, 0, bm.Width, bm.Height );
g.DrawImage( bitNew, 0, 0 );//Redraw image in specific back color
g.Dispose();
this.TransparencyKey = Color.White;//Set transparent keyTop
23 楼test33(隐姓埋名)回复于 2006-09-25 19:47:04 得分 0
顶了哇`Top
24 楼lih163(做自己喜欢的事)回复于 2006-09-27 14:31:34 得分 0
学习Top
25 楼babyQ(restarting)回复于 2006-09-28 08:48:01 得分 0
愚翁 的要顶,Top




