Picturebox滑块控制透明度

我在我的表单中有一个PictureBox并在其中加载图像。

我需要这个PictureBox来改变透明度(opacity,visibilit..etc),因为我需要用户更好地看到这个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 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, rX, rY, r.Width, r.Height, GraphicsUnit.Pixel, imageAtt); return bmpOut; } 

请注意, ColorMatrix其元素为缩放因子,其中1为标识。 TrackBar.Value0-2550-255 ,就像Bitmap alpha通道一样。

另请注意,该函数会创建一个新的 Bitmap ,这可能会导致GDI 泄漏 。 看来, PictureBox照顾它; 至少用taskmanger测试它( ‘详细信息’ – 打开GDI-objects列! )显示没有问题:-)

最后的注意事项: 当且仅当 PictureBox 嵌套在控件’后面’时才会有效! 如果它只是重叠,这将无法正常工作!! 在我的例子中,它位于一个TabPage ,这是一个Container ,你放在它上面的任何东西都嵌套在里面。 如果我把它放到Panel上,它的工作原理会一样。 但PictureBoxes不是容器。 因此,如果您希望在其后面显示另一个PictureBox ,那么您需要使用代码来创建嵌套: pboxTop.Parent = pBoxBackground; pboxTop.Location = Point.Empty; pboxTop.Parent = pBoxBackground; pboxTop.Location = Point.Empty;