Guest User

Untitled

a guest
Jul 16th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. // Neues Bitmap-Bild-Objekt für die Ausgabe anlegen (minus 2 Pixel um den Bug der weißen Ränder zu umgehen)
  2. Bitmap outputimage = new Bitmap(inputimage.Width - 2, inputimage.Height - 2);
  3.  
  4. // Anlegen von zwei zweidimensionalen Arrays mit den Werten der Sobel-Matrizen
  5. int[,] sX = { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } };
  6. int[,] sY = { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } };
  7.  
  8. // Anlegen der 2 verschachtelten for-Schleifen zum durchlaufen des Bildes.
  9. for (int x = 1; x < inputimage.Width - 1; x++)
  10. {
  11. for (int y = 1; y < inputimage.Height - 1; y++)
  12. {
  13. // Anlegen temporärer Variablen für Farbwerte und Zwischenergebnisse
  14. Color tempColor;
  15. int tempGrey;
  16. int tempPixelValueSx = 0;
  17. int tempPixelValueSy = 0;
  18. int finalPixelValue;
  19.  
  20. // Zwei weitere for-Schleifen zum durchlaufen der Matrix sX und der Werte um den zu bearbeitenden Pixel
  21. for (int a = -1; a <= 1; a++)
  22. {
  23. for (int b = -1; b <= 1; b++)
  24. {
  25. // Abrufen der Farbinformation um den betreffenden Pixel
  26. tempColor = inputimage.GetPixel(x + a, y + b);
  27.  
  28. // Umrechen des RGB Werted in Graustufen
  29. tempGrey = (tempColor.R + tempColor.G + tempColor.B) / 3;
  30.  
  31. // Verrechnen mit der Zahl in der Matrix sX und abspeichern in tempPixelValueSx
  32. tempPixelValueSx += tempGrey * sX[1 + a, 1 + b];
  33.  
  34. // Verrechnen mit der Zahl in der Matrix sY und abspeichern in tempPixelValueSy
  35. tempPixelValueSy += tempGrey * sY[1 + a, 1 + b];
  36. }
  37. }
  38.  
  39. // Anwenden der Formel zur Berechnung des Wertes an der Position x, y
  40. finalPixelValue = Convert.ToInt32(Math.Sqrt(Math.Pow(tempPixelValueSx, 2) + Math.Pow(tempPixelValueSy, 2)));
  41.  
  42. // Abrunden des Wertes, wenn er größer ist als 1020
  43. if (finalPixelValue > 1020)
  44. {
  45. finalPixelValue = 1020;
  46. }
  47.  
  48. // Wert umrechnen in Wertebereich von Graustufen
  49. finalPixelValue /= 4;
  50.  
  51. // Pixel in Ausgabebild setzen
  52. outputimage.SetPixel(x - 1, y - 1, Color.FromArgb(finalPixelValue, finalPixelValue, finalPixelValue));
  53. }
  54. }
  55.  
  56. // Fertiges Bild ausgeben
  57. return outputimage;
Add Comment
Please, Sign In to add comment