Использование 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, похоже, дает правильный результат, поэтому есть проблема с его отрисовкой.
Если ваше изображение CImg содержит только одно значение или несколько равных значений, дисплей по умолчанию будет отображать их в виде черных изображений из-за нормализации, примененной к значениям пикселей для дисплея.
Поскольку CImg может управлять изображениями любого типа (в том числе с плавающей запятой), он всегда нормализует значения пикселей в [0,255] для дисплея (он, конечно, не изменяет значение пикселей в вашем объекте, он просто нормализует их внутренне для его отображение).
Таким образом, если ваше изображение имеет значения в один пиксель, нормализация всегда будет иметь значение «0», а следовательно, и черное изображение.
Это означает, что вы, вероятно, не создавали свой CImgDisplay disp с правильным аргументом нормализации пикселя (по умолчанию он включен).
disp должен быть построен так:
CImgDisplay disp(100,100,"my display",0);
отключить стандартную нормализацию значений пикселей.
Других решений пока нет …