{"id":44,"date":"2010-01-02T10:00:51","date_gmt":"2010-01-02T09:00:51","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=44"},"modified":"2025-03-02T11:32:21","modified_gmt":"2025-03-02T10:32:21","slug":"net-graphics-setpixel","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2010\/01\/net-graphics-setpixel\/","title":{"rendered":"SetPixel f\u00fcr System.Drawing.Graphics"},"content":{"rendered":"<p>Die Klasse System.Drawing.Graphics enth\u00e4lt keine Funktion zum Setzen einzelner Pixel. DrawLine(Pen pen, int x1, int y1, int x2, int y2) als Alternative zu verwenden, f\u00fchrt ebenfalls nicht zum gew\u00fcnschten Ergebnis. Offensichtlich werden Linien mit einer L\u00e4nge von einem Pixel nicht gezeichnet.<!--more--><\/p>\n<p>Benutzt man hingegen die gleitkommabasierte Variante von DrawLine mit einem geringen Versatz zwischen Start- und Endpunkt, wird ein einzelner Punkt ausgegeben. Allerdings ist diese Funktion im .NET Compact Framework nicht vorhanden. In diesem Fall kann auf DrawEllipse(Pen pen, int x, int y, int width, int height) ausgewichen werden, da diese Funktion ebenfalls einzelne Pixel erzeugen kann.<\/p>\n<h2>Erweiterungsklasse<\/h2>\n<p>Die folgende Klasse enth\u00e4lt Funktionen, die es erm\u00f6glichen, einzelne Pixel auszugeben.<\/p>\n<pre><code class=\"cs\">using System;\r\nusing System.Drawing;\r\n\r\nnamespace Liersch.ExampleUtilities\r\n{\r\n  public static class GraphicsUtils\r\n  {\r\n    public static void SetPixel(\r\n      Graphics graphics, Color color, int x, int y)\r\n    {\r\n      Pen pen=new Pen(color);\r\n      SetPixel(graphics, pen, x, y);\r\n      pen.Dispose();\r\n    }\r\n\r\n    public static void SetPixel(\r\n      Graphics graphics, Pen pen, int x, int y)\r\n    {\r\n#if WindowsCE\r\n      \/\/ This function generates a single pixel\r\n      graphics.DrawEllipse(pen, x, y, 1, 1);\r\n#else\r\n      \/\/ Using the float-based function with\r\n      \/\/ a small offset generates a single pixel\r\n      graphics.DrawLine(pen, x, y, x+0.01f, y+0.01f);\r\n#endif\r\n    }\r\n\r\n    public static void DrawLine(\r\n      Graphics graphics, Pen pen, int x1, int y1, int x2, int y2)\r\n    {\r\n      if(x1==x2 && y1==y2)\r\n        SetPixel(graphics, pen, x1, y1);\r\n      else graphics.DrawLine(pen, x1, y1, x2, y2);\r\n    }\r\n  }\r\n}<\/code><\/pre>\n<h2>Abschlie\u00dfende Bemerkung<\/h2>\n<p>Im Vergleich zu DrawLine ist beim Einsatz der Funktion DrawEllipse mit einer wesentlich geringeren Performance zu rechnen. Analysen bzgl. der Geschwindigkeit wurden jedoch nicht erstellt. Kommentare und weitere Vorschl\u00e4ge sind stets erw\u00fcnscht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Klasse System.Drawing.Graphics enth\u00e4lt keine Funktion zum Setzen einzelner Pixel. DrawLine(Pen pen, int x1, int y1, int x2, int y2) als Alternative zu verwenden, f\u00fchrt ebenfalls nicht zum gew\u00fcnschten Ergebnis. Offensichtlich werden Linien mit einer L\u00e4nge von einem Pixel nicht gezeichnet.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,25],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-cs"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":6,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":422,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/44\/revisions\/422"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}