8

这是我的全部代码:

#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 只是一个黑色正方形,没有该像素(并且保存一个已通过重复调用 draw_point 在一个更大的程序中进行修改的 cimg 图像也失败了)。这里发生了什么?

4

2 回答 2

5

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

参考:

于 2012-04-23T19:43:20.513 回答
1

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

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

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

于 2012-04-23T18:42:38.827 回答