Не удается сохранить изображение в файл правильно с 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
в качестве первого шага.