首页 文章

无法使用cimg库将图像正确保存到文件中

提问于
浏览
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只是一个黑色正方形,没有那个像素(并且保存了一个cimg图像,该图像已经通过在较大的程序中重复调用draw_point而修改,该程序执行一些有用的操作也会失败) . 这里发生了什么?

2 回答

  • 1

    问题是您在启用规范化的情况下创建了 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");
    

    参考文献:

  • 4

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

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

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

相关问题