Che cosa è il modo corretto di utilizzare una tabella di ricerca del colore con un Win32 DIB?

StackOverflow https://stackoverflow.com/questions/4648146

Domanda

Sto scrivendo il codice per eseguire la finestra di livellamento immagine DICOM a 16 bit su (che viene caricato in memoria come un po 'DIB 16). Il mio codice finestra di livellamento è completo e opere di generare una tabella di ricerca per mappare i valori dei pixel di origine per i valori dei pixel finali desiderate.

Quello che non sono sicuro circa è come applicare questa tabella di ricerca per l'immagine. Vedo che l'oggetto BITMAPINFO ha un campo su di esso 'bmiColors', di tipo RGBQUAD []. Ho provato l'assegnazione mia tabella di ricerca a questa proprietà, ma sembra non avere alcun effetto. Ho provato anche la funzione SetDIBColorTable ma anche non sembra avere alcun effetto sull'uscita schermo.

E 'quello che sto cercando di fare (applicare la mia tabella di ricerca, mentre la pittura piuttosto che modificare i dati dei pixel si) anche supportati in GDI, o è una realtà dovrebbe scorrere i dati dei pixel si cambiano i valori dei pixel uno per uno prima di copiarlo sul video?

Inoltre, non sembra fare la differenza se io uso le funzioni BitBlt o SetDIBitsToDevice. Entrambi tendono a comportarsi lo stesso qui.

Sono aperto a usando DirectX se questo sarebbe più facile da achive quello che voglio. Non ho usato prima anche se in modo codice di esempio sarebbe bello se è offerto come una risposta.

Il mio codice è molto prestazioni critiche in modo che sto cercando il modo più veloce per raggiungere questo obiettivo, anche se può comportare uno sforzo maggiore / code.

È stato utile?

Soluzione

tabelle di colore sono utilizzate solo per le bitmap che hanno 8-BPP o al di sotto, in modo da GDI li ignorerà nelle immagini a 16-BPP.

(La tabella può avere al massimo 256 colori, indicizzati da byte.)

(Tecnicamente, la tabella può ancora essere utilizzato per specificare quali colori sono più importanti, ma che non ti aiuta, e io non sono sicuro che sia realmente utilizzati da nulla in questi giorni.)

Ho anche trovato GDI ad essere inaffidabile a lavorare in modalità in scala di colore, quindi non lo consiglio.

(Vedere la mia domanda qui, anche se non è la stessa cosa che si sta facendo dovrebbe scoraggiare basandosi su GDI per questo. E 'sulla conversione dal 16-BPP o 32 BPP in scala di colore, ei problemi GDI ha a che fare con precisione: GDI non riesce la conversione in scala di colore con esatto palette -? Inoltre, il codice legato in là imposta alcuni bitmap in scala di colore in modo da potete trovare utile, ma non credo che si applicheranno a quello che stai doign con i dati a 16 bpp comunque .)

Per quello che stai facendo, mi consiglia di modificare i dati bitmap direttamente da soli, usando qualcosa come uno std :: mappa come una tabella di ricerca veloce per la conversione da un insieme di colori per l'altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top