public int[,] DitheringArray;
private Bitmap Dithering(Bitmap Orginalbild)
{
int Höhe = Orginalbild.Height;
int Breite = Orginalbild.Width;
DitheringArray = new int[Höhe, Breite];
int Spalte = 0, Zeile = 0, temp = 0;
Bitmap neu = new Bitmap(Breite, Höhe);
int rot = 0, grün = 0, blau = 0, grau = 0;
for (Spalte = 0; Spalte < Breite; Spalte++)
{
for (Zeile = 0; Zeile < Höhe; Zeile++)
{
Color pixel = Orginalbild.GetPixel(Spalte, Zeile);
rot = pixel.R;
grün = pixel.G;
blau = pixel.B;
grau = GrauBerechnen(rot, grün, blau);
DitheringArray[Zeile, Spalte] = grau;
}
}
for (Zeile = 1; Zeile < Höhe - 1; Zeile++)
{
for (Spalte = 1; Spalte < Breite - 1; Spalte++)
{
DitheringBerechnen(Zeile, Spalte);
}
}
for (Spalte = 0; Spalte < Breite; Spalte++)
{
for (Zeile = 0; Zeile < Höhe; Zeile++)
{
Color pixel = Orginalbild.GetPixel(Spalte, Zeile);
temp = DitheringArray[Zeile, Spalte];
if (temp == 0)
temp = 0;
else
temp = 255;
pixel = Color.FromArgb(temp, temp, temp);
neu.SetPixel(Spalte, Zeile, pixel);
}
}
return neu;
}
public int GrauBerechnen(int rot, int gruen, int blau)
{
return (rot + gruen + blau) / 3;
}
public void DitheringBerechnen(int Zeile, int Spalte)
{
int Teiler = 0;
if (DitheringArray[Zeile, Spalte] < 128)
{
Teiler = DitheringArray[Zeile, Spalte] / 16;
DitheringArray[Zeile, Spalte] = 0;
}
else
{
Teiler = (DitheringArray[Zeile, Spalte] - 255) / 16;
DitheringArray[Zeile, Spalte] = 1;
}
DitheringArray[Zeile + 1, Spalte - 1] += (Teiler * 3);
DitheringArray[Zeile + 1, Spalte] += (Teiler * 5);
DitheringArray[Zeile + 1, Spalte + 1] += Teiler;
DitheringArray[Zeile, Spalte + 1] += (Teiler * 7);
}