无法保存图像与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 来做一些有用的操作也会失败)。这里发生了什么?
答
问题是您创建了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
的文档。
1用于短,完整的示例程序。请参阅http://sscce.org/。 – 2012-04-23 19:07:37