我在做一个有闪屏的应用程序。
我有一个图像,我想把下面的进度条一样:
- 示例**
我已经成功地使位图透明。但是,现在,图像在进度条后面
"现在"
有没有办法让图像出现在进度条前面?谢谢。
代码:
public partial class Form1 : Form
{
Bitmap m_l;
public Form1()
{
InitializeComponent();
m_l = Properties.Resources.LU;
m_l.MakeTransparent(Color.Transparent);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(m_l, new Rectangle(new Point(0, -40), new Size(200, 264))); progressBar1.Refresh();
}
}
4条答案
按热度按时间x759pob21#
您可以将
PictureBox
与Region
配合使用来完成此操作。在窗体中添加一个
PictureBox
。它将保存图像。根据需要将其放置为与ProgressBar
重叠。将Image
属性设置为覆盖图像。在表单构造函数中,我们将设置
PictureBox
的Region
,区域定义控件的形状,我们将设置Region
等于图像的非透明部分。这些代码大部分来自here
hgncfbus2#
有5****6个选项:
1.您可以将
ProgressBar's
BackColor
设置为Transparent
。结果:译文:
属性值无效。此控件不支持透明背景色。
对于子类也是如此。
1.你可以嵌套一个透明的
Panel
,将图像作为它的BackgroundImage
。正如您所看到的,尽管面板和大部分图像是透明的,进度条仍然在它下面有一个矩形,它自己的
BackColor
;如上图所示,它不可能是透明的1.您可以用面板覆盖。
结果:
看起来很相似。但是这次背景色是面板在覆盖之前的原始背景。这就是winforms伪造透明度的方法;这个伪造的透明只适用于nested控件,而不是所有..
1.您可以在进度条的
Paint
事件中绘制图像。它没有一个,如果你把它子类化,它就不会为你工作。总结一下:所有这些尝试都失败了结论很简单:
ProgressBar
是一个动画控件,不支持任何干扰。1.最后一个选项:* * 编写你自己的**。你可以子类化一个
Panel
或Label
,并编写你自己的进度条。许多人谁想要有一个自定义的外观,已经这样做了,你可以找到许多现成的例子。GraphicsPath
来创建一个Region
,它会用图像屏蔽**一些控件。所以虽然我的例子不起作用,OP的图像看起来可能很好。zfciruhq3#
作为方式,人是开发商,但接缝有一个真正薄弱的逻辑,邮政编码和链接其余的网站,可以死在任何时候,这里的2失踪行的答案
use:
hs1rzwqc4#
(对不起,因为误用了答案函数,但答案是渴望评论)
@TaW看起来你还不太理解这种方法,所以我会尝试更详细地解释它
OP询问他是否可以在另一个控件(进度条)上制作透明图像
我假设这个透明的图像在一个PictureBox中,你似乎假设了一些其他的控件
要定位控件,如果我的假设是正确的,在进度条前面的图片框,他所要做的就是右键单击,然后单击图片框上的“置于最前面
在进度条前面有一个“透明”的PictureBox-但正如您在回答中提到的,我们不能就此停止,因为“透明”不是我所期望的,但显然您知道-WinForms执行的是这种“父背景颜色选择”,我们最终在进度条前面得到一个不完全透明的图像,而是一个灰色背景
现在发布的网址已经到位:http://www.richardhyland.com/diary/2009/05/26/how-to-truely-make-a-picturebox-background-transparent/
这是所提供的代码,并在该url中解释:
有了这个,我们可以实现一个完全透明的图片框前面的进度条。
所以没有这个准则,我们就有了这个:
但有了这个准则:
注意,这种方法有一些缺点:
1.不能完美地工作--你可以看到图像边缘的灰色像素
1.在大图像上表现不佳-因为使用
GetPixel
获取每个像素是一个“挑战”(请忽略图片显示“JPG”的事实,我说的是透明图片-这只是谷歌搜索呈现给我的第一张图片,是的,文件是透明的PNG)