Domanda

Prima di tutto, questo non è di rendere il controllo PictureBox trasparente. Si tratta di trasparenza bitmap sulla "tela" completamente opaco.

Il PictureBox avrà sempre la dimensione di 300 * 300 con sfondo bianco. Senza trasparenza è necessaria per il controllo.

Che cosa ho bisogno è il modo per disegnare il rettangolo trasparente (o qualsiasi altra cosa) sul pictureBox, quindi tutto ciò che era già lì si vedrà "attraverso" il rettangolo.

Di 'Ho un codice seguente

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;

In questo modo tracciare un rettangolo rosso al centro della tela bianca. Ora, ho bisogno di un altro (trasparente) "livello" a l'immagine che contiene un altro rettangolo, ma uno che è trasparente.

Posso provare

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

Dato che sto usando un colore specificando sua alfa = 128, il rettangolo risultante dovrebbe essere trasparente in modo che il primo rettangolo rosso dovrebbe essere visto attraverso quest'altro verde.

Tuttavia, questo non accade in modo corretto. Posso vedere il rettangolo rosso dietro il nuovo verde, ma la parte del rettangolo verde che non si sovrappone quello rosso rimarrà completamente opaco. Tuttavia, se impostato il valore alfa del colore alcuni estremamente piccolo valore (ad esempio 1-5), l'intero rettangolo sarà trasparente. Questo non è normale, a mio parere - che 5/255 è solo la metà trasparente e che 128/255 non è trasparente a tutti ... E se ci fosse una stringa drawed in precedenza con g.DrawString (), la stringa è o appare dietro il rettangolo verde o non è, a seconda del livello di trasparenza. Per esempio se l'Alpha è maggiore o uguale a (circa) 40, la stringa non è visibile a tutti, e se è inferiore a 40, allora mostrerà, più visibili valori alfa inferiori, fino a alfa = 0.

Come è questo pennello (quando creato da colore ARGB) applicato? Mi sto perdendo qualcosa? A me sembra che l'impostazione di una spazzola trasparente rende lo sfondo "più visibile" invece di impostare l'oggetto "meno visibile".

Grazie per le eventuali risposte con suggerimenti.

[EDIT] Sembra che ho avuto un brutto bug nella logica dell'applicazione, quindi la routine disegno successo in un ciclo, così quando ho accumulato certo numero di rettangoli trasparenti, sono diventati sempre più spessa.

Il codice, quando prese fuori dal giro, funziona correttamente.

Il mio male.

È stato utile?

Soluzione

alt text http://lh4.ggpht.com /_1TPOP7DzY1E/S02ivAoGgTI/AAAAAAAAC6s/ZQvZQ5GdwSU/s800/Capture4.png

è fatto da questo codice:

    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 non è opaca come si può vedere ... La stringa è perfettamente visibile.

A me sembra che l'impostazione di una spazzola trasparente rende lo sfondo "più visibile" invece di impostare l'oggetto "meno visibile".

sfondo "più visibile" e l'oggetto "meno visibile" sono la stessa cosa ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top