Ivan Gentile

Office and .NET blog
posts - 24, comments - 0, trackbacks - 2

Convertire un immagine a colori in livelli di grigio in C# e VB.Net

I colori di un immagine possono essere convertiti in scale di grigio facendo un calcolo dei valori effettivi del contrasto e della luminosità. Questi valori vengono utilizzati per generarne uno di grigio.

Di seguito vi riporto il codice per farlo. 

Il valore reale della luminosità di un pixel si calcola con la seguente formula:

Y = 0.3*ROSSO + 0.59*VERDE + 0.11*BLU

Questo valore della luminosità può essere convertito in scale di grigio usando

Color.FromArgb(Y,Y,Y).

[C#]

public Bitmap ConvertiScalediGrigio (Bitmap sorgente)

{

  Bitmap bm = new Bitmap(sorgente.Width,source.Height);

  for(int y=0;y

  {

    for(int x=0;x

    {

      Color c= sorgente.GetPixel(x,y);

      int luma = (int)(c.R*0.3 + c.G*0.59+ c.B*0.11);

      bm.SetPixel(x,y,Color.FromArgb(luma,luma,luma));

    }

  }

  return bm;

}

[VB]

Public Function ConvertiScalediGrigio (ByVal sorgente As Bitmap) as Bitmap

  Dim bm as new Bitmap(sorgente.Width, sorgente.Height)

  Dim x

  Dim y

  For y=0 To bm.Height

    For x=0 To bm.Width

      Dim c as Color = sorgente.GetPixel(x,y)

      Dim luma as Integer = CInt(c.R*0.3 + c.G*0.59 + c.B*0.11)

      bm.SetPixel(x,y,Color.FromArgb(luma,luma,luma)

    Next

  Next

  Return bm

End Function

Sotto riporto un immagine per dimostrarvi il funzionamento.

Ciao

Ivan

posted on mercoledì 18 gennaio 2006 17.52