Regolare colori RGB – Codice VB.NET

Come regolare colori RGB di un’immagine: intensificare o diminuire l’intensità dei colori Rosso, Verde e Blue. Gestire il canale Alpha (opzionale).

Introduzione

Può capitare che in alcune parti del nostro programma occorra modificare per qualche motivo l’intensità di uno o più canali (compreso quello Alpha) di un’immagine. Ad esempio se stiamo implementando un elaboratore di immagini, sapere come regolare colori RGB tramite vb.net è uno dei passi fondamentali. La funzione che ho implementato, girando qua e la sul web e rielaborando il tutto, che si occupa appunto di regolare colori RGB di immagini è: IngAC_IMMAGINE_RGBA(ByVal Immagine As Bitmap, RED As Single, ByVal GREEN As Single, ByVal BLUE As Single, Optional ByVal ALPHA As Single = 0) As Bitmap. 

[codesyntax lang=”vbnet”]

    Public Function IngAC_IMMAGINE_RGBA(ByVal Immagine As Bitmap, RED As Single,
                       ByVal GREEN As Single, ByVal BLUE As Single,
                       Optional ByVal ALPHA As Single = 0) As Bitmap
        ' Range [0,255]
        If RED < 0 Then RED = 0
        If RED > 255 Then RED = 255
        If GREEN < 0 Then GREEN = 0
        If GREEN > 255 Then GREEN = 255
        If BLUE < 0 Then BLUE = 0
        If BLUE > 255 Then BLUE = 255
        If ALPHA < 0 Then ALPHA = 0
        If ALPHA > 255 Then ALPHA = 255
        Dim sr, sg, sb, sa As Single
        ' Si normalizzano i vari colori a 1
        sr = RED / 255
        sg = GREEN / 255
        sb = BLUE / 255
        sa = ALPHA / 255
        ' Si crea la color_matrix
        Dim Color_Matrix As Single()() = {
                        New Single() {1, 0, 0, 0, 0},
                        New Single() {0, 1, 0, 0, 0},
                        New Single() {0, 0, 1, 0, 0},
                        New Single() {0, 0, 0, 1, 0},
                        New Single() {sr, sg, sb, sa, 1}}
        ' Si crea una copia dell'immagine di partenza 
        Dim bmp As New Bitmap(Immagine)
        Dim imgattr As New ImageAttributes()
        Dim rc As New Rectangle(0, 0, Immagine.Width, Immagine.Height)
        Dim g As Graphics = Graphics.FromImage(Immagine)
        Dim cm As New ColorMatrix(Color_Matrix)
        ' Si associa la Color_Matrix con una ImageAttributes
        imgattr.SetColorMatrix(cm)
        ' Si applica la color_matrix all'immagine
        g.DrawImage(bmp, rc, 0, 0, Immagine.Width, Immagine.Height,
                                  GraphicsUnit.Pixel, imgattr)
        ' Reset
        g.Dispose()
        Return Immagine ' Restituisce l'immagine modificata
    End Function

[/codesyntax] 

Come regolare colori RGB di una immagine in VB.NET

La funzione IngAC_IMMAGINE_RGBA ha come input:

  • Immagine che è l’immagine orginale che può provenire sia da file che da picturebox o anche da altri oggetti image o bitmap.
  • RED che rappresenta l’intensità del colore rosso e varia tra 0 e 255;
  • GREEN che rappresenta l’intensità del colore verde e varia tra 0 e 255;
  • BLUE che rappresenta l’intensità del colore blu e varia tra 0 e 255;
  • ALPHA (opzionale) che rappresenta l’intensità dell trasparenza e varia tra 0 (nessuna trasparenza) e 255 (massima trasparenza);

In output si avrà un’immagine uguale all’originale ma modificata nei colori, da usare come più ci aggrada.

Funzionamento di IngAC_IMMAGINE_RGBA ()

Il funzionamento è lineare; occorre innanzi tutto includere Imports System.Drawing.Imaging che permette di accedere alle funzionalità grafiche di vb.net e alle varie classi inerenti. Effettuato il controllo sull’input e creata la matrice color_matrix, il tutto per permettere una maggiore velocità di elaborazione rispetto ai classici cicli for pixel per pixel, si passa alla definizione dell’area da elaborare (tramite l’oggetto rectangle) e infine all’elaborazione vera e propria con g.DrawImage.

Link Utili:

Regolare colori RGB - Codice VB.NET

Regolare colori RGB – Codice VB.NET

You may also like...