Regolare luminosità immagine – Codice VB.NET
Regolare luminosità immagine: una semplice funzione in codice VB.NET
Introduzione
Può capitare che in alcune parti del nostro programma occorra modificare per qualche motivo la luminosità di un’immagine. Ad esempio se stiamo implementando un elaboratore di immagini, sapere come regolare luminosità di una immagine 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 luminosità di immagini è: IngAC_IMMAGINE_LUMINOSITA (ByVal Immagine As Bitmap, ByVal Luminosita As Single) As Bitmap.
Public Function IngAC_IMMAGINE_LUMINOSITA(ByVal Immagine As Bitmap, ByVal Luminosita As Single) As Bitmap 'luminosità range [-1,+1]=>[0,100] If Luminosita < 0 Then Luminosita = 0 If Luminosita > 100 Then Luminosita = 100 Dim br As Single = 2 * Luminosita / 100 - 1 '-1, +1 ' Si crea la Brightness_Matrix Dim Brightness_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() {br, br, br, 0, 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(Brightness_Matrix) ' Si associa la Brightness_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 fare a regolare luminosità immagine in VB.NET
La funzione IngAC_IMMAGINE_LUMINOSITA 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.
- Luminosità che appunto rappresenta il valore della luminosità che vogliamo applicare e varia tra zero (buio totale) a 100 (completamente bianco);
In output si avrà un’immagine uguale all’originale ma modificata nella luminosità, da usare come più ci aggrada.
Funzionamento di IngAC_IMMAGINE_LUMINOSITA ()
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 Brightness_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:
- MSDN -> Classe Bitmap
- MSDN -> Classe Image
- MSDN -> System.Drawing.Imaging
- MSDN -> DrawImage
- Elenco di tutti i listati VB.NET su Romoletto Blog