Ich versuche nicht, ein einzelnes Pixel in einem Windows Form einzuschalten.
graphics.DrawLine(Pens.Black, 50, 50, 51, 50); // draws two pixels
graphics.DrawLine(Pens.Black, 50, 50, 50, 50); // draws no pixels
Die API sollte wirklich eine Methode haben, um die Farbe eines Pixels festzulegen, aber ich sehe keine.
Ich benutze C #.
Antworten:
Dadurch wird ein einzelnes Pixel festgelegt:
quelle
DrawRectangle()
. Wenn dies der Fall istPen.Alignment = PenAlignment.Outset
, werdenPen.Width
pixeldicke Umrisse um das angegebene Rechteck gezogen. Wenn Sie jedoch angebenPen.Alignment = PenAlignment.Inset
, wird Pen.Width Pixel dicke "Kontur" innerhalb des angegebenen Rechtecks gezeichnet.Das
Graphics
Objekt hat dies nicht, da es eine Abstraktion ist und verwendet werden kann, um ein Vektorgrafikformat abzudecken. In diesem Zusammenhang wäre es nicht sinnvoll, ein einzelnes Pixel festzulegen. DasBitmap
Bildformat hatGetPixel()
undSetPixel()
, aber kein Grafikobjekt, das darauf aufgebaut ist. Für Ihr Szenario scheint Ihre Option wirklich die einzige zu sein, da es keine einheitliche Möglichkeit gibt, ein einzelnes Pixel für ein allgemeines Grafikobjekt festzulegen (und Sie wissen nicht genau, was es ist, als Ihr Steuerelement / Formular könnte doppelt gepuffert sein usw.)Warum müssen Sie ein einzelnes Pixel einstellen?
quelle
Nur um den vollständigen Code für die Antwort von Henk Holterman anzuzeigen:
quelle
Wenn ich viele einzelne Pixel zeichne (für verschiedene benutzerdefinierte Datenanzeigen), neige ich dazu, sie auf eine Bitmap zu zeichnen und diese dann auf den Bildschirm zu bringen.
Die Bitmap-Operationen GetPixel und SetPixel sind nicht besonders schnell, da sie sehr viele Grenzprüfungen durchführen. Es ist jedoch recht einfach, eine 'schnelle Bitmap'-Klasse zu erstellen, die schnellen Zugriff auf eine Bitmap hat.
quelle
MSDN-Seite auf GetHdc
Ich denke, das ist es, wonach Sie suchen. Sie müssen den HDC herunterladen und dann die GDI-Aufrufe verwenden, um SetPixel zu verwenden. Beachten Sie, dass ein COLORREF in GDI ein DWORD ist, in dem eine BGR-Farbe gespeichert ist. Es gibt keinen Alphakanal und es ist nicht RGB wie die Farbstruktur von GDI +.
Dies ist ein kleiner Codeabschnitt, den ich geschrieben habe, um dieselbe Aufgabe auszuführen:
quelle
Anscheinend zeichnet DrawLine eine Linie, die ein Pixel unter der tatsächlich angegebenen Länge liegt. Es scheint kein DrawPoint / DrawPixel / so weiter zu geben, aber stattdessen können Sie DrawRectangle mit einer Breite und Höhe von 1 verwenden, um ein einzelnes Pixel zu zeichnen.
quelle
Zeichnen einer Linie 2px mit einem Stift mit DashStyle.DashStyle.Dot zeichnet ein einzelnes Pixel.
quelle