Sprache: C#
Diese Funktion wandelt ein Bitmap in Graustufen um.
using System.Drawing;
private Bitmap BildSW(Bitmap Bild)
{
Color PixRGB;
Color PixSW;
int temp;
for (int sp = 0; sp < Bild.Width; sp++)
{
for(int zei = 0; zei < Bild.Height; zei++)
{
PixRGB = Bild.GetPixel(sp,zei);
temp = (PixRGB.R + PixRGB.G + PixRGB.B)/3;
PixSW = Color.FromArgb(temp,temp,temp);
Bild.SetPixel(sp,zei,PixSW);
}
}
return Bild;
}
using System.Drawing;
private Bitmap BildSW(Bitmap Bild)
{
Color PixRGB;
Color PixSW;
int temp;
for (int sp = 0; sp < Bild.Width; sp++)
{
for(int zei = 0; zei < Bild.Height; zei++)
{
PixRGB = Bild.GetPixel(sp,zei);
temp = (PixRGB.R + PixRGB.G + PixRGB.B)/3;
PixSW = Color.FromArgb(temp,temp,temp);
Bild.SetPixel(sp,zei,PixSW);
}
}
return Bild;
}
Alte URL:
/snippet/bitmap-in-graustufen-wandeln/70
Das Auge nimmt die Farben der einzelnen Farbkanäle auch bei gleichen Beträgen unterschiedlich hell wahr. Deshalb berechnet man normalerweise einen gewichteten Durchschnitt. In der Bildbearbeitung GIMP wird folgende Formel verwendet: Y = 0.3R + 0.59G + 0.11B. Das Y nennt man auch die Leuchtkraft der Farbe.
Davon abgesehen arbeiten GetPixel und SetPixel sehr langsam. Hier könnte die Verwendung von Bitmap.LockBits zu einer erheblichen Beschleunigung führen.
Ich hab mich mal an die Lockbits gesetzt^^
währe schön wenn du das nach oben einfügst. =)
[code]
private Bitmap BildSW(Bitmap bmp)
{
int numBytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[numBytes];
int tmpSW;
PixelFormat pxf = PixelFormat.Format24bppRgb;
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);
IntPtr ptr = bmpData.Scan0;
Marshal.Copy(ptr, rgbValues, 0, numBytes);
for(int counter = 0; counter < rgbValues.Length; counter+=3) { tmpSW = rgbValues[counter]; tmpSW += rgbValues[counter+1]; tmpSW += rgbValues[counter+2]; tmpSW /= 3; rgbValues[counter] = rgbValues[counter+1] = rgbValues[counter+2] = Convert.ToByte(tmpSW); } Marshal.Copy(rgbValues, 0, ptr, numBytes); bmp.UnlockBits(bmpData); return bmp; } [/code]