首先,这不是关于使PictureBox控件透明。这是关于在完全不透明的“画布”位图透明度。

在图片框将总是具有300 * 300白色背景的大小。需要用于控制无透明度。

我需要的是一个已经存在将要看到的“通过”矩形绘制矩形透明(或任何其他)上的图片框的方式,所以任何事情。

说我有一个下面的代码

Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 100, 100);
pictureBox.Image = bmp;

这将在白色帆布的中间绘制一个红色矩形。现在,我需要在包含另一个矩形画面另一个(透明)“层”,但一个是透明的。

我可以尝试

Brush brush = new SolidBrush(Color.FromArgb(128, 0, 80, 0));
g.FillRectangle(brush, 50, 50, 200, 200);

由于我使用的颜色通过指定其alpha = 128,得到的矩形应该是透明的,所以第一红色矩形应该通过此其他绿色一个可见。

然而,这并不正确地发生。我可以看到背后的新的绿色的红色矩形,但不重叠红色的绿色矩形的部分仍将完全不透明。但是,如果我的颜色的Alpha值设置为一些非常小的值(说1-5),整个矩形的外观是透明的。这不是在我看来正常 - 这二百五十五分之五只有一半透明和128/255是完全不透明......如果有一个字符串g.DrawString()之前drawed,字符串为后面显示绿色矩形或不是,这取决于透明程度。例如,如果Alpha是大于或等于(大约)40,该字符串是完全不可见的,如果它小于40,则它会显示,对于较小的α值更可见,下降到阿尔法= 0

这是如何用刷(当从ARGB颜色创建)施加?我缺少的东西吗?对我来说似乎设置一个透明刷使得背景“更可见的”,而不是设置对象“不可见”。

感谢与建议的任何答复。

<强> [编辑] 看来我在应用逻辑的讨厌的错误,所以绘制例程发生在一个循环中,所以,当我积累了一定数目透明矩形的,它们变得越来越厚。

的代码,当取出的循环,正常工作。

我的坏。

有帮助吗?

解决方案

替代文字http://lh4.ggpht.com /_1TPOP7DzY1E/S02ivAoGgTI/AAAAAAAAC6s/ZQvZQ5GdwSU/s800/Capture4.png

通过该代码来完成:

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Bitmap bmp = new Bitmap(300, 300);
        Graphics g = Graphics.FromImage(bmp);
        g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
        g.FillEllipse(new SolidBrush(Color.Blue), 25, 25, 100, 200);
        g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 300, 100);
        g.DrawString("this is a STRING", SystemFonts.DefaultFont, 
            Brushes.Black, new Point(150, 150));
        pictureBox1.Image = bmp;

        Brush brush = new SolidBrush(Color.FromArgb(40, 0, 80, 0));
        g.DrawRectangle(Pens.Black, 50, 50, 200, 200);
        g.FillRectangle(brush, 50, 50, 200, 200);
    }

绿色的部分是透明的,你可以看到...该字符串是完全可见的。

对我来说似乎设置一个透明刷使得背景“更可见的”,而不是设置对象“不可见”。

背景“更可见”和对象“不可见”是相同的东西...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top