【问题标题】:Can't save image to file properly with cimg library无法使用 cimg 库将图像正确保存到文件
【发布时间】:2012-04-23 18:24:34
【问题描述】:

这是我的全部代码:

#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 图像 在一个更大的程序中做一些有用的事情也会失败)。这是怎么回事?

【问题讨论】:

  • +1 表示简短而完整的示例程序。见sscce.org

标签: c++ cimg


【解决方案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");

参考资料:

【讨论】:

  • 就是这样,没有正确规范化。谢谢!
【解决方案2】:

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

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

我会首先检查CImg 的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2016-04-22
    • 1970-01-01
    • 2019-06-13
    • 2015-05-20
    • 2022-01-07
    • 1970-01-01
    相关资源
    最近更新 更多