首页 文章

PictureBox上的图形透明度

提问于
浏览
0

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

PictureBox的大小始终为300 * 300,白色背景 . 控件不需要透明度 .

我需要的是将透明矩形(或其他任何东西)绘制到pictureBox上的方法,因此任何已经存在的东西都会被“透过”矩形看到 .

说我有以下代码

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),则整个矩形看起来都是透明的 . 这在我看来是不正常的 - 5/255只是半透明而且128/255根本不透明...如果之前有一个用g.DrawString()绘制的字符串,则字符串要么显示在后面绿色矩形或不是,取决于透明度 . 例如,如果Alpha大于或等于(大约)40,则该字符串根本不可见,如果它小于40,则它将显示,对于较小的alpha值更加可见,直到alpha = 0 .

这个画笔(当用Argb颜色创建时)是如何应用的?我错过了什么吗?对我来说,似乎设置透明画笔使背景“更加可见”,而不是将对象设置为“不太可见” .

感谢您对建议的任何回复 .

[EDIT] 似乎我在应用程序逻辑中有一个讨厌的错误,所以绘制例程发生在一个循环中,所以当我累积了一定数量的透明矩形时,它们变得越来越厚 .

从循环中取出时,代码可以正常工作 .

我的错 .

1 回答

  • 0

    alt text 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);
        }
    

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

    对我来说,似乎设置透明画笔使背景"more visible"而不是设置对象"less visible" .

    背景“更明显”和对象“不太明显”是一回事......

相关问题