рендеринг дисплея cig черный

Использование CImg; Я сделаю это быстро и просто.

CImg<float> i = *spectralImages->at(currentImage);
disp.display(i);
float* f = i.data();

disp отображает черное изображение, несмотря на то, что пошаговое выполнение *(f), *(f+1), *(f+2) и т. д. приводит к получению правильных чисел (255.0, 245.0 и т. д.)

Я работал над этим весь день. Есть ли причуда с CImg, которую я упускаю?

РЕДАКТИРОВАТЬ: Сохранение файла в формате BMP, по-видимому, дает правильный результат, поэтому возникла проблема с его рисованием.


person ThatSnail    schedule 10.01.2013    source источник


Ответы (1)


Если ваше изображение CImg содержит только одно значение или несколько одинаковых значений, на дисплее по умолчанию они будут отображаться как черные изображения из-за нормализации, примененной к значениям пикселей для дисплея. Поскольку CImg может управлять любым типом изображений (включая изображения с плавающей запятой), он всегда нормализует значения пикселей в [0,255] для отображения (конечно, он не меняет значение пикселя в вашем объекте, он просто нормализует их внутренне для его отображение). Поэтому, если ваше изображение имеет однопиксельные значения, нормализация всегда будет равна «0», следовательно, в результате получится черное изображение.

Это означает, что вы, вероятно, не создали свой дисплей CImgDisplay с правильным аргументом нормализации пикселей (по умолчанию он включен). disp должен быть построен следующим образом:

CImgDisplay disp(100,100,"my display",0);

чтобы отключить нормализацию значений пикселей по умолчанию.

person bvalabas    schedule 10.01.2013
comment
Ах, идеально. Это все объясняет. Большое спасибо. - person ThatSnail; 10.01.2013