这是我的全部代码:
#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/