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.
Schreiben Sie einen Kommentar
Sie müssen angemeldet sein, um einen Kommentar abzugeben.