(高手帮助!)c# 让picturebox真正透明

zheyimiao 2009-10-12 01:57:10
picturebox的backColor属性设置成Color.Transparent只能使picturebox控件的背景对父窗口的背景透明,对别的picturebox或者控件都没有透明效果,这个好像需要底层的操作,重载picturebox类。我在codeproject上找到一篇类似的文章有点接近但还不能实现我想要得功能(http://www.codeproject.com/KB/dotnet/transparent_controls_net.aspx),希望牛人指点一下
...全文
6050 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunchaosailor 2011-10-23
  • 打赏
  • 举报
回复
遇到过这个问题,确实是个很头疼的问题。也没找到好的方法。最后只是用父控件的叠放实现了部分功能,但是效果不是很好!
大师赵 2011-08-16
  • 打赏
  • 举报
回复
只能自己写了,背景透明可能是先把父窗口位置处得图像绘制到背景透明控件,再调用透明控件的绘制方法,该控件不知道自己还挡住了哪些控件
ancheel 2011-06-12
  • 打赏
  • 举报
回复
呵呵,顶上去吧。最近我也遇到这个问题 了,我也是要播放动态的GIF。
后来实在没办法了,就用了死办法,自己播放GIF动画。在背景的PAINT事件里在指定的座标drawimage。
乱世狂刀 2010-11-26
  • 打赏
  • 举报
回复
我也碰上了
乱世狂刀 2010-11-26
  • 打赏
  • 举报
回复
up up up
zheyimiao 2009-10-19
  • 打赏
  • 举报
回复
up
zheyimiao 2009-10-15
  • 打赏
  • 举报
回复
up
BATTLERxANGE 2009-10-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 zheyimiao 的回复:]
这样对程序来说是不行的,我需要动态加载图片,不可能把需要加载的图片都先这么做一次的引用 18 楼 battlerxange 的回复:
用WINDOWS自带的画图,PS都可以,“颜色填充功能”,把你想透明掉的地方用某种颜色填充
就像这样:

黑色区域是我想要透明掉的~我用黑色填充了

[/Quote]
那么有没有一种约定呢?比如你加载的图片需要透明的部分都为某种颜色?如果没有的话那估计没有可能了,因为所谓的背景透明只是我们感知到的,电脑并不知道什么是背景,哪部分为背景。
所有的图片都不一样,要透明的部分也都不一样,那电脑怎么知道那里是背景,那里需要透明呢?没可能的吧!
ConanKid 2009-10-14
  • 打赏
  • 举报
回复
我也遇到这个问题.而且我的问题是一个章盖在一个Label和Form上面(一半在Label,一半在Form).有解了再来看看.
zheyimiao 2009-10-14
  • 打赏
  • 举报
回复
这样对程序来说是不行的,我需要动态加载图片,不可能把需要加载的图片都先这么做一次的[Quote=引用 18 楼 battlerxange 的回复:]
用WINDOWS自带的画图,PS都可以,“颜色填充功能”,把你想透明掉的地方用某种颜色填充
就像这样:

黑色区域是我想要透明掉的~我用黑色填充了
[/Quote]
BATTLERxANGE 2009-10-14
  • 打赏
  • 举报
回复
用WINDOWS自带的画图,PS都可以,“颜色填充功能”,把你想透明掉的地方用某种颜色填充
就像这样:

黑色区域是我想要透明掉的~我用黑色填充了
zheyimiao 2009-10-14
  • 打赏
  • 举报
回复
在重写的Onpaint里应该怎么实现呢?
[Quote=引用 15 楼 programfana 的回复:]
重写OnPaint(),不调用基类的 OnPaint()。
[/Quote]
zheyimiao 2009-10-14
  • 打赏
  • 举报
回复
怎么填充需求的地方呢,图形不规则,那些背景区域不好操作吧
[Quote=引用 12 楼 battlerxange 的回复:]
- =这不叫透明度~准确说应该就是矩形透明吧?
这样的话可以用我之前说的那个API或者MakeTransparent可以实现的~~~
那些需要透明的用某种颜色填充比如红色,然后Ba.MakeTransparent(Color.Red); 处理,
在pictureBox1.Image = Ba;
[/Quote]
zheyimiao 2009-10-14
  • 打赏
  • 举报
回复
其实这个程序很大程度上是改变picturebox控件本身背景,而不是图片,我用它的zoom模式,图片都按比例缩小在它中间,它边角处挡着后面的部分是控件本身
[Quote=引用 21 楼 battlerxange 的回复:]
那么有没有一种约定呢?比如你加载的图片需要透明的部分都为某种颜色?如果没有的话那估计没有可能了,因为所谓的背景透明只是我们感知到的,电脑并不知道什么是背景,哪部分为背景。
所有的图片都不一样,要透明的部分也都不一样,那电脑怎么知道那里是背景,那里需要透明呢?没可能的吧!
[/Quote]
SimpleM 2009-10-13
  • 打赏
  • 举报
回复
trackBar在C#中有自带的,不用下,根据Scroll滚动条拉动事件改编其透明度,透明度都是小数点的,所以赋值前要做个换算
yuanhuiqiao 2009-10-13
  • 打赏
  • 举报
回复
好像有个API:SetLayeredWindowAttributes,不知试过没。
BitCoffee 2009-10-13
  • 打赏
  • 举报
回复
picturebox的backColor属性设置成Color.Transparent
然后设置picturebox.Parent = 父容器;
wanbotang 2009-10-13
  • 打赏
  • 举报
回复
重写OnPaint(),不调用基类的 OnPaint()。
skysquall 2009-10-13
  • 打赏
  • 举报
回复
带alpha通道的png图片就透明啦
BATTLERxANGE 2009-10-13
  • 打赏
  • 举报
回复

大概这样的效果~这是一个PICTUREBOX
加载更多回复(8)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧