Frage

ich schreibe einige Codes Fensterung auf einem 16-Bit-DICOM-Bild auszuführen (die im Speicher als 16-Bit-DIB geladen wird). Mein Fenster Nivellierung Code vollständig und Arbeiten von einer Verweistabelle Erzeugen der Quellenpixelwerte zu den gewünschten endgültigen Pixelwerten zuzuordnen.

Was ich bin nicht sicher, wie diese Lookup-Tabelle auf das Bild anzuwenden. Ich sehe, dass das BITMAP Objekt ein Feld hat auf ihrem bmiColors 'vom Typ RGBQUAD []. Ich habe versucht, meine Lookup-Tabelle auf diese Eigenschaft zuweisen, aber es scheint keine Wirkung zu haben. Ich habe auch die SetDIBColorTable Funktion versucht, aber es scheint auch keine Auswirkungen auf die Bildschirmausgabe zu haben.

Ist das, was ich versuche zu tun (meine Lookup-Tabelle gelten während des Malens anstatt Modifizieren der Pixeldaten selbst) auch in GDI unterstützt wird, oder wird man eigentlich eine Schleife durch die Pixeldaten soll sich die Pixelwerte einer nach dem anderen zu ändern vor Blitten?

Es scheint auch keinen Unterschied machen, ob ich die BitBlt oder SetDIBitsToDevice Funktionen nutzen. Beide neigen dazu, das gleiche hier zu verhalten.

Ich bin offen für mit DirectX, wenn das wäre einfacher zu achive, was ich will. Ich habe es vorher nicht verwendet würde, obwohl so Beispielcode schön, wenn es als Antwort angeboten wird.

Mein Code ist sehr Leistung kritisch, ich bin auf der Suche nach dem schnellsten Weg, dies zu erreichen, auch wenn es mehr Aufwand / Code beinhalten kann.

War es hilfreich?

Lösung

Farbtabellen sind nur für Bitmaps verwendet, die 8-bpp oder darunter, so GDI sie 16-bpp Bilder in Ihrem ignoriert.

(Die Tabelle maximal 256 Farben haben kann, durch Bytes indiziert.)

(Technisch gesehen ist der Tisch immer noch verwendet werden, um festzulegen, welche Farben am wichtigsten sind, aber das macht man nicht helfen, und ich bin nicht sicher, dass die verwendete wirklich durch nichts in diesen Tagen.)

Ich habe auch unzuverlässig sein GDI bei Arbeiten in indexierten-Farbmodi, so würde ich es nicht empfehlen.

(Siehe meine Frage hier, obwohl es nicht über die gleiche Sache ist, wie Sie es tun Sie GDI off unter Berufung dafür setzen sollte. Es geht um die Umwandlung von 16-bpp oder 32-bpp in indizierte Farbe und die Probleme GDI hat dabei genau vorgehen: GDI nicht in indizierte Farbumwandlung mit exakter Palette - auch der Code verknüpft, da einige indizierten Farben Bitmaps so einrichtet, dass Sie es nützlich finden, aber ich glaube nicht, dass sie sowieso, was Sie doign mit 16-bpp Daten gelten ).

Für das, was du tust, ich würde empfehlen, die Bitmap-Daten direkt selbst zu modifizieren, etwas mit wie ein std :: map als schnelle Lookup-Tabelle von einem Satz von Farben auf den anderen umzuwandeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top