Pregunta

En primer lugar, esto no se trata de hacer el control PictureBox transparente. Se trata de la transparencia de mapa de bits en el "lienzo" completamente opaco.

El cuadro de imagen siempre tendrá el tamaño de 300 x 300 con fondo blanco. No se necesita ninguna transparencia para el control.

Lo que necesito es la manera de dibujar el rectángulo transparente (o cualquier otra cosa) en el cuadro de imagen, así que cualquier cosa que ya estaba allí se verá "a través de" rectángulo.

Decir que tengo un siguiente código

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;

Para ello se utilizará un rectángulo rojo en el centro de la tela blanca. Ahora, necesito otra (transparente) "capa" en la imagen que contiene otro rectángulo, pero uno que es transparente.

Puedo tratar

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

Desde que estoy usando un color especificando su alpha = 128, el rectángulo resultante debe ser transparente para el primer rectángulo rojo debe verse a través de este otro verde.

Sin embargo, esto no sucede correctamente. Puedo ver el rectángulo rojo detrás de la nueva verde, pero la parte del rectángulo verde que no se superpone el rojo a permanecer completamente opaco. Sin embargo, si fijo el valor alfa del color a un valor extremadamente pequeño (digamos 1-5), todo el rectángulo se verá transparente. Esto no es normal en mi opinión - que es sólo la mitad 5/255 transparente y que 128/255 no es transparente en todo ... Y si había una cadena dibujada previamente con g.drawString (), la cadena es bien representada por detrás el rectángulo verde o no lo está, dependiendo del nivel de transparencia. Por ejemplo, si el Alfa es mayor que o igual a (alrededor) 40, la cadena no es visible en absoluto, y si es menos de 40, a continuación, se muestran, más visible para los valores de alfa pequeños, hasta alpha = 0.

¿Cómo está este cepillo (cuando se crean a partir de color ARGB) aplicado? ¿Me estoy perdiendo de algo? A mí me parece que el establecimiento de un cepillo transparente hace que el fondo "más visible" en lugar de establecer el objeto "menos visible".

Gracias por todas las respuestas con sugerencias.

[EDIT] Parece que tenía un error desagradable en la lógica de aplicación, por lo que la rutina de dibujo sucedido en un bucle, de modo que cuando he acumulado cierto número de rectángulos transparentes, que se hizo más y más espesa.

El código, cuando se toma fuera del circuito, funciona correctamente.

Mi mal.

¿Fue útil?

Solución

texto alternativo http://lh4.ggpht.com /_1TPOP7DzY1E/S02ivAoGgTI/AAAAAAAAC6s/ZQvZQ5GdwSU/s800/Capture4.png

se hace por este código:

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

La parte verde no es opaco como se puede ver ... La cadena es perfectamente visible.

Me parece que la fijación de un cepillo transparente hace que el fondo "más visible" en lugar de establecer el objeto "menos visible".

fondo "más visible" y el objeto "menos visible" son la misma cosa ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top