[英]Picturebox slider control transparency
我的窗体中有一个PictureBox,并在其中加载了图像。
我需要此PictureBox来更改透明度(不透明度,可见性等),因为我需要用户更好地查看此PictureBox背后的图像,因此,当他需要时,他只需拖动控件滑块,图像就开始变得不可见,一步一步,直到他确定还可以,再说50%的透明度。
我添加了控制滑块,但找不到其他方法。 我尝试了pictureBox.Opacity,pictureBox.Transparency,没有任何效果。
在winforms中,您将必须修改 PictureBox.Image
的alpha 。
要快速完成此操作,请使用ColorMatrix
!
这是一个例子:
轨迹栏代码:
Image original = null;
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (original == null) original = (Bitmap) pictureBox1.Image.Clone();
pictureBox1.BackColor = Color.Transparent;
pictureBox1.Image = SetAlpha((Bitmap)original, trackBar1.Value);
}
要使用ColorMatrix
我们需要以下using子句:
using System.Drawing.Imaging;
现在使用SetAlpha
函数; 请注意,它基本上是MS链接的克隆..:
static Bitmap SetAlpha(Bitmap bmpIn, int alpha)
{
Bitmap bmpOut = new Bitmap(bmpIn.Width, bmpIn.Height);
float a = alpha / 255f;
Rectangle r = new Rectangle(0, 0, bmpIn.Width, bmpIn.Height);
float[][] matrixItems = {
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, a, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix( colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
using (Graphics g = Graphics.FromImage(bmpOut))
g.DrawImage(bmpIn, r, r.X, r.Y, r.Width, r.Height, GraphicsUnit.Pixel, imageAtt);
return bmpOut;
}
请注意, ColorMatrix
期望其元素为比例因子,其中1
为标识。 TrackBar.Value
是0-255
,就像Bitmap
alpha通道一样。
另请注意,该函数将创建一个新的 Bitmap
,这可能会导致GDI
泄漏 。 似乎在这里PictureBox
会处理它; 至少用taskmanger进行测试( ' Details'- 打开GDI-objects列! )显示没有问题:-)
最后说明: 仅当 PictureBox
嵌套在控件“后面”时,此方法才起作用! 如果只是重叠,将无法使用!! 在我的示例中,它位于TabPage
, TabPage
是一个Container
,放置在它上面的任何内容都嵌套在其中。 如果将它放到Panel
上,它的工作原理相同。 但是PictureBoxes
不是容器。 因此,如果要在其后显示另一个PictureBox
,则需要代码来创建嵌套: pboxTop.Parent = pBoxBackground; pboxTop.Location = Point.Empty;
pboxTop.Parent = pBoxBackground; pboxTop.Location = Point.Empty;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.