vrijdag 19 oktober 2007

Converteer afbeeldingen naar grijswaarden in .Net 2.0

Wanneer je in .Net afbeeldingen wil converteren naar grijswaarden, moet je GDI+ gebruiken. GDI (Graphics Device Interface) is hét component in het .Net framework wat gebruikt kan worden voor image processing.

Hieronder de code om afbeeldingen met behulp van GDI om te zetten naar afbeeldingen in grijswaarden:
public static Bitmap ConvertToGrayscale(Bitmap source, Color transparencyColor)
{
Bitmap bm = new Bitmap(source.Width, source.Height);
for (int y = 0; y < bm.Height; y++)
{
for (int x = 0; x < bm.Width; x++)
{
Color c = source.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));
}
}
if (transparencyColor!=Color.Empty)
bm.MakeTransparent(transparencyColor);
return bm;
}
public static Bitmap ConvertToGrayscale(Bitmap source)
{
return ConvertToGrayscale(source, Color.Empty);
}

De optionele parameter transparencyColor wordt gebruikt om deze kleur in de afbeelding te converteren naar Transparant!
Het grote nadeel van GDI+ is, is dat het niet erg snel is, omdat GDI+ nog niet voldoende gebruikt maakt van hardware acceleratie.

Een goed alternatief in het .Net 2.0 framework is de statische methode CreateDisabledImage in the ToolStripRenderer klasse. Deze methode heeft mij geholpen een groot aantal afbeeldingen in een User-Interface te converteren naar afbeeldingen in grijswaarden, met een hoge performance. Deze methode roep je als volgt aan:
public static Image CreateDisabledImage (
Image normalImage
)

Deze klasse is onderdeel van de System.Windows.Forms namespace. Je moet dus wel een reference naar deze assembly aan je project toevoegen.

Bronnen:
Wikipedia
Microsoft MSDN
Bob Powel (GDI guru)

Geen opmerkingen: