无法保存图像与CIMG库

问题描述:

这里正确的文件是我的代码全部:无法保存图像与CIMG库

#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。但是,file.bmp只是一个黑色的方块,没有那个像素(并且保存一个cimg图像,这个图像在一个更大的程序中反复调用draw_point 来做一些有用的操作也会失败)。这里发生了什么?

+2

1用于短,完整的示例程序。请参阅http://sscce.org/。 – 2012-04-23 19:07:37

问题是您创建了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"); 

参考文献:

+0

这就是它,不正常正常化。谢谢! – Tneuktippa 2012-04-24 02:05:32

我对这个库不熟悉,但是这种行为会暗示CImgDisplay在渲染时会以不同的方式解释图像。

我期望将白色定义为const unsigned char color[] = {255,255,255};来表示位图的RGB值。

作为第一步,我会检查CImg的文档。