GDI+: disegnare un'immagine trasparente

image

Nel precedente post abbiamo visto come disegnare un'immagine semitrasparente.

Adesso vediamo come rendere traparente un solo colore di un'immagine, così da poter vedere nitidamente due soggetti sovrapposti.

La cosa è estremamente semplice perchè viene eseguita direttamente dal metodo MakeTrasparent della Classe System.Drawing.Bitmap.

 

    ' VB.
    Private Sub lblColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles lblColor.Click

        If Me.ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            Me.lblColor.BackColor = Me.ColorDialog1.Color

            ' Carica l'immagine di sfondo.
            Dim img1 As Image = Image.FromFile("C:\Dnw.png")

            ' Carica l'immagine in primo piano.
            Dim img2 As New Bitmap("C:\Net.png")

            ' Imposta il colore trasparente.
            img2.MakeTransparent(Me.lblColor.BackColor)

            ' Disegna l'immagine.
            Dim gr As Graphics = Me.Panel3.CreateGraphics
            gr.DrawImage(img1, 0, 0)
            gr.DrawImage(img2, 0, 0)
            gr.Dispose()
        End If
    End Sub
// C#. 
private void // lblColor_Click(object sender, System.EventArgs e) 
{ 
    
    if (this.ColorDialog1.ShowDialog == Windows.Forms.DialogResult.OK) { 
        this.lblColor.BackColor = this.ColorDialog1.Color; 
        
        // Carica l'immagine di sfondo. 
        Image img1 = Image.FromFile("C:\\Dnw.png"); 
        
        // Carica l'immagine in primo piano. 
        Bitmap img2 = new Bitmap("C:\\Net.png"); 
        
        // Imposta il colore trasparente. 
        img2.MakeTransparent(this.lblColor.BackColor); 
        
        // Disegna l'immagine. 
        Graphics gr = this.Panel3.CreateGraphics; 
        gr.DrawImage(img1, 0, 0); 
        gr.DrawImage(img2, 0, 0); 
        gr.Dispose(); 
    } 
} 

 

Ovviamente il risultato finale dipenderà dalla qualità e dall'eventuale antialiasing dell'immagine in primo piano.

 

Tag Cloud: ,

Print | posted on lunedì 20 ottobre 2008 10.38

Feedback

# re: GDI+: disegnare un'immagine trasparente

Left by Alessandro at 23/11/2009 22.00
Gravatar Ciao..grazie della guida:

utile , diretta e chiara.

Solo una cosa : come posso estendere una immag. ?

ad esempio se uso un'immagine di 50x50 come faccio a farla diventare 54x76 ?

Distinti Saluti,
Alessandro.

# re: GDI+: disegnare un'immagine trasparente

Left by AndreaZ at 25/11/2009 9.32
Gravatar Ciao Alessandro,
per ridimensionare un'immagine basta utilizzare un overload del metodo DrawImage dell'oggetto Graphics:

' Definisce le dimensioni dell'immagine ingrandita.
Dim rect As New Rectangle(0, 0, 54, 76)

' Disegna l'immagine.
gr.DrawImage(img1, rect)

Ovviamente più ingrandirai l'immagine e più perderai di qualità. Ti conviene quindi utilizzare l'anitialiasing utilizzando la proprietà InterpolationMode dell'oggetto graphics.

Andrea

Your comment:





 
Please add 8 and 3 and type the answer here:

Copyright © Andrea Zingoni

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski