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

标签 c++ 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 只是一个黑色方 block ,没有 像素(并保存已通过重复调用 draw_point 进行修改的 cimg 图像 在一个更大的程序中做一些有用的事情也会失败)。这是怎么回事?

最佳答案

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

引用资料:

关于c++ - 无法使用 cimg 库将图像正确保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286111/

相关文章:

c++ - CImg 在 Codegear 2009 中编译问题

c++ - 使用 CIMG for c++ 设置线条图案

c++ - 将 exr/pfm 保存为小端

c++ - 对于 C++ 中的单个静态变量,是否有比类更好的选择?

c++ - 内存管理 QByteArray::fromRawData()

c++ - 如何在 C++ 中转换类型?

c++ - 动态规划 - 计算地铁系统中的路径

c++ - 如何使用 CImg 检索加载了 CImg 的图像的颜色空间?

c++ - 使用 CImg 库时 Unresolved external symbol 错误

c++ - 通过递增更改文件名