Не удается сохранить изображение в файл правильно с CImg library

вот весь мой код:

#include "CImg.h"
#include <iostream>

using namespace cimg_library;
int main() {

CImg<float> image(100,100,1,3,0);
const float color[] = {1.0,1.0,0.0};
image.draw_point(50,50,color);
image.save("file.bmp");
CImgDisplay local(image, "Hah");
while (true) {
    local.wait();
    }   

}

это успешно отображает то, что я ожидаю в окне, а именно, полностью черный квадрат с белым пикселем на 50,50. Однако файл.bmp-это просто черный квадрат, без этого пиксель (и сохранение изображения cimg, которое было изменено с помощью повторных вызовов draw_point в более крупной программе, которая делает что-то полезное, также терпит неудачу). Что здесь происходит?

2 ответов


проблема в том, что вы создаете CImgDisplay с включенной нормализацией. Таким образом, ваш пиксель {1,1,0} нормализуется к {255,255,0} и отображается на экране.

CImg.save не выполняет нормализацию, поэтому пиксель сохраняется на диск как очень темный пиксель.

вы можете исправить проблему, изменив свой белый цвет пикселя:

const float color[] = {255.,255.,255.};

и, необязательно, отключив нормализацию:

CImgDisplay local(image, "Hah", 0);

в качестве альтернативы, вы могли бы нормализовать исходное изображение перед сохранением или отображением:

image.draw_point(50,50,color);
image.normalize(0, 255);
image.save("file.bmp");

ссылки:


Я не знаком с этой библиотекой, но это поведение будет означать, что CImgDisplay интерпретирует изображение по-разному при рендеринге.

Я ожидал бы, что белый цвет будет определен как const unsigned char color[] = {255,255,255}; для представления значений RGB для растрового изображения.

Я бы проверил документацию для CImg в качестве первого шага.