图片框滑块控制透明度

Picturebox slider control transparency

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

我需要这个 PictureBox 来改变透明度(不透明度,visibilit..等),因为我需要用户更好地看到这个 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 link..:[=​​35=] 的克隆

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 通道..

另请注意,该函数会创建一个 new Bitmap,这可能会导致 GDI leakingPictureBox 似乎在这里处理了它;至少用任务管理器测试它('Details' - 打开 GDI-objects 列!)显示没有问题:-)

最后说明:当且仅当 PictureBox 嵌套 在控件 [=74= 中时,这才有效 ] 它!如果只是 重叠 这将不起作用!!在我的示例中,它位于 TabPage 上,这是一个 Container,您放在上面的任何东西都会嵌套在里面。如果我把它放到 Panel 上,它的工作原理是一样的。但是 PictureBoxes 不是容器。所以如果你想让另一个 PictureBox 出现在它后面,那么 你需要代​​码 来创建嵌套:pboxTop.Parent = pBoxBackground; pboxTop.Location = Point.Empty;