Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Neues Bitmap-Bild-Objekt für die Ausgabe anlegen (minus 2 Pixel um den Bug der weißen Ränder zu umgehen)
- Bitmap outputimage = new Bitmap(inputimage.Width - 2, inputimage.Height - 2);
- // Anlegen von zwei zweidimensionalen Arrays mit den Werten der Sobel-Matrizen
- int[,] sX = { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } };
- int[,] sY = { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } };
- // Anlegen der 2 verschachtelten for-Schleifen zum durchlaufen des Bildes.
- for (int x = 1; x < inputimage.Width - 1; x++)
- {
- for (int y = 1; y < inputimage.Height - 1; y++)
- {
- // Anlegen temporärer Variablen für Farbwerte und Zwischenergebnisse
- Color tempColor;
- int tempGrey;
- int tempPixelValueSx = 0;
- int tempPixelValueSy = 0;
- int finalPixelValue;
- // Zwei weitere for-Schleifen zum durchlaufen der Matrix sX und der Werte um den zu bearbeitenden Pixel
- for (int a = -1; a <= 1; a++)
- {
- for (int b = -1; b <= 1; b++)
- {
- // Abrufen der Farbinformation um den betreffenden Pixel
- tempColor = inputimage.GetPixel(x + a, y + b);
- // Umrechen des RGB Werted in Graustufen
- tempGrey = (tempColor.R + tempColor.G + tempColor.B) / 3;
- // Verrechnen mit der Zahl in der Matrix sX und abspeichern in tempPixelValueSx
- tempPixelValueSx += tempGrey * sX[1 + a, 1 + b];
- // Verrechnen mit der Zahl in der Matrix sY und abspeichern in tempPixelValueSy
- tempPixelValueSy += tempGrey * sY[1 + a, 1 + b];
- }
- }
- // Anwenden der Formel zur Berechnung des Wertes an der Position x, y
- finalPixelValue = Convert.ToInt32(Math.Sqrt(Math.Pow(tempPixelValueSx, 2) + Math.Pow(tempPixelValueSy, 2)));
- // Abrunden des Wertes, wenn er größer ist als 1020
- if (finalPixelValue > 1020)
- {
- finalPixelValue = 1020;
- }
- // Wert umrechnen in Wertebereich von Graustufen
- finalPixelValue /= 4;
- // Pixel in Ausgabebild setzen
- outputimage.SetPixel(x - 1, y - 1, Color.FromArgb(finalPixelValue, finalPixelValue, finalPixelValue));
- }
- }
- // Fertiges Bild ausgeben
- return outputimage;
Add Comment
Please, Sign In to add comment