SetPixel für System.Drawing.Graphics

Die Klasse System.Drawing.Graphics enthält keine Funktion zum Setzen einzelner Pixel. DrawLine(Pen pen, int x1, int y1, int x2, int y2) als Alternative zu verwenden, führt ebenfalls nicht zum gewünschten Ergebnis. Offensichtlich werden Linien mit einer Länge von einem Pixel nicht gezeichnet.

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.

Erweiterungsklasse

Die folgende Klasse enthält Funktionen, die es ermöglichen, einzelne Pixel auszugeben.

using System;
using System.Drawing;

namespace Liersch.ExampleUtilities
{
  public static class GraphicsUtils
  {
    public static void SetPixel(
      Graphics graphics, Color color, int x, int y)
    {
      Pen pen=new Pen(color);
      SetPixel(graphics, pen, x, y);
      pen.Dispose();
    }

    public static void SetPixel(
      Graphics graphics, Pen pen, int x, int y)
    {
#if WindowsCE
      // This function generates a single pixel
      graphics.DrawEllipse(pen, x, y, 1, 1);
#else
      // Using the float-based function with
      // a small offset generates a single pixel
      graphics.DrawLine(pen, x, y, x+0.01f, y+0.01f);
#endif
    }

    public static void DrawLine(
      Graphics graphics, Pen pen, int x1, int y1, int x2, int y2)
    {
      if(x1==x2 && y1==y2)
        SetPixel(graphics, pen, x1, y1);
      else graphics.DrawLine(pen, x1, y1, x2, y2);
    }
  }
}

Abschließende Bemerkung

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äge sind stets erwünscht.

Ähnliche Artikel

Schreiben Sie einen Kommentar