3 Stimmen

Gdiplus 64bit Farben

Ich erstelle eine 64bit-Bitmap und umhülle sie mit einem Graphics-Objekt, um darüber zu zeichnen. Das Problem ist, dass die Gdiplus-Farbklasse nur 32bit ist (jede Komponente ist nur ein Byte, d.h. maximal 255), wie kann ich also über ein 64bit-Bild mit Gdiplus zeichnen? z.B..

Bitmap bmp(100, 100, PixelFormat64bppARGB);

Graphics g(&bmp);
//how do I draw a red line now, if i use Color(255,0,0) it comes as almost dark black red

2voto

schnaader Punkte 47961

Es scheint, dass Gdiplus keine 64-Bit-Operationen unterstützt. Ein irgendwie einfacher Weg, um trotzdem Gdiplus-Methoden verwenden zu können, wäre, das Bild in zwei 32-Bit-Bilder aufzuteilen und diese getrennt zu bearbeiten.

Sie können entweder die ARGB-Kanäle in AARR und GGBB aufteilen oder zwei 32-Bit-Bilder mit den unteren und oberen ARGB-Bits verwenden.

Für beide Varianten müssten Sie entweder Wrapping-Funktionen schreiben oder jeden Aufruf in zwei Teile aufteilen, etwa so:

// This is what you want to do (ARGB, 16 bit per channel)
// g.DrawLine(new Pen(Color(0, 65535, 1024, 31), 1, 0, 0, 100, 100);

// AARR GGBB variant
gAARR.DrawLine(new Pen(Color(0,0,255,255), 1, 0, 0, 100, 100);
gGGBB.DrawLine(new Pen(Color(4,0,0,31), 1, 0, 0, 100, 100);

// ARGBhigh ARGBlow variant
gHigh.DrawLine(new Pen(Color(0,255,4,0), 1, 0, 0, 100, 100);
gLow.DrawLine(new Pen(Color(0,255,0,31), 1, 0, 0, 100, 100);

Beachten Sie, dass ich hier die Reihenfolge Farbe(A,R,G,B) verwendet habe, und ich bin mir nicht sicher, ob sie stimmt. Laut der MSDN-Dokumentation muss dies stattdessen in Farbe(R,G,B,A) geändert werden. Wenn Sie den Alphakanal nicht benötigen, sollten Sie die Highlow-Variante bevorzugen, da Sie mit ihr immer noch Color(R,G,B) verwenden können.

Um die Ergebnisse anzuzeigen oder zu speichern, müssen Sie die beiden Puffer zusammenführen.

1voto

dalle Punkte 17489

Sie können nicht nach MSDN - Konstanten für das Bildpixelformat :

Bemerkungen

PixelFormat48bppRGB , PixelFormat64bppARGB und PixelFormat64bppPARGB verwenden 16 Bit pro Farbkomponente (Kanal). Microsoft Windows GDI+ Version 1.0 kann 16-Bit-pro-Kanal-Bilder lesen, aber solche Bilder werden jedoch in ein 8-Bit-pro-Kanal-Format für die Verarbeitung, Anzeige und Speicherung konvertiert.

0voto

Ed S. Punkte 118985

Sie können diesen Bitmap-Konstruktor verwenden, um das Pixelformat festzulegen:

public:
Bitmap(
    int width, 
    int height, 
    PixelFormat format
)

EDIT: Sie werden nicht in der Lage sein, die Color-Klasse zu verwenden (ich glaube), da sie nur 32-Bit-Farben unterstützt. Sie können jedoch LockBits auf die Bitmap und Schleife durch sie manuell aufrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X