Какой правильный способ использовать стол цветной поиска с DIB Win32?

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

Вопрос

Я пишу некоторый код для выравнивания окна на 16-битном изображении DICOM (который загружен в память как 16-битная DIB). Мой код выравнивания окна завершен и работает, создавая таблицу поиска, чтобы сопоставить значения исходных пикселей в нужные конечные значения пикселей.

Что я не уверен, это то, как применить этот поиск таблицы на изображение. Я вижу, что объект Bitmapinfo имеет поле на нем «Bmicolors», типа RGBquad []. Я пытался назначить свой поиск таблицы на это свойство, но, похоже, не имеет никакого эффекта. Я также попробовал функцию SetDibColortable, но она тоже не имеет никакого эффекта на выходе экрана.

Я пытаюсь сделать (применить мою таблицу поиска во время рисования, а не модифицировать саму данные пикселей), даже поддерживаемых в GDI, или на самом деле предполагается петлю через саму пиксельные данные, изменяющие значения пикселей один за другим, прежде чем блеска?

Это также не имеет значения, использую ли я Bitblt или SetDibitstodevice Functions. Они оба имеют тенденцию вести себя то же самое здесь.

Я открыт для использования DirectX, если это было бы легче достичь того, что я хочу. Я не использовал его раньше, хотя этот пример код будет хорошим, если он предлагается как ответ.

Мой код очень важен, поэтому я ищу самый быстрый способ добиться этого, даже если он может включать больше усилий / код.

Это было полезно?

Решение

Цветные таблицы используются только для растровых изображений, которые имеют 8-BPP или ниже, поэтому GDI будет игнорировать их в ваших 16-BPP изображениях.

(Стол может иметь максимум 256 цветов, проиндексированных байтами.)

(Технически таблица все еще может использоваться для уточнения того, какие цвета наиболее важны, но это не помогает вам, и я не уверен, что действительно используется в эти дни.)

Я также нашел GDI ненадежным при работе в проиндексированных цветовых режимах, поэтому я не рекомендую его.

(См. В этом вопросе, хотя это не одинаковое, как вы делаете, следует указать вам полагаться на GDI для этого. Речь идет о преобразовании от 16-BPP или 32-BPP в индексированный цвет, а проблемы GDI что точно: GDI не удается преобразование в индексированный цвет с точной палитрой? - Кроме того, код, связанный туда, устанавливает некоторые растровые изображения по индексированным цвету, поэтому вы можете найти его полезным, но я не думаю, что они будут применяться к тому, что вы добираетесь до 16-бирн.

Для того, что вы делаете, я бы порекомендовал изменять данные растровых изображений непосредственно самостоятельно, используя что-то вроде STD :: Map в качестве быстрой таблицы поиска для преобразования из одного набора цветов на другую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top