gpt4 book ai didi

c++ - 二值图像数据上的 CImg

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:56 26 4
gpt4 key购买 nike

我在使用 X11 xGetImage 拍摄快照后创建了一个二进制文件,并将数据字段的内容存储在 binary file 中(文件已压缩,请解压)。现在,我正在尝试使用 CImg 并学习它的用法。

第一个问题

所以,我尝试使用 load_rgba 函数对这个二进制数据进行 CImg

CImgDisplay *disp;
CImg <float>img1,img2; //I don't why,it only works with float, with int it gives gray colour and with unsigned int it gives black foreground
img2 = img1.load_rgba("imagedata",1366,768); //1366 X 768 is the dimension of my image that i got from X11
disp = new CImgDisplay(1024,768,"window");
disp->display(img2);

现在,我可以在窗口中看到图像,但质量有所下降。所以我试着看一下代码,发现

第 34318 行

assign(dimw,dimh,1,4); // the depth is assigned to 1. which i believe is the culprit, however i would like confirm it

为什么它只在为模板传递 float 时才有效??

第二个问题现在我想,通过首先自己读取文件然后使用此代码将缓冲区指针移交给 Cimg 来使用 CImg

int main() {
char *data;
int size = 1366*768*4; //1366 X 768 is the dimension of my image that i got from X11 and 4 is number of bits per pixel
ifstream file ("imagedata", ios::in|ios::binary|ios::ate);
data = new char[size];
file.read (data, size);

CImgDisplay *disp;
CImg <float>img3(data,1366,768,1,4);
disp = new CImgDisplay(1024,768,"window");
disp->display(img3);
getchar();
return 0;
}

在相同的图像数据上运行此代码(如第一种情况),我得到的只是一个黑色窗口。此外设置第四个参数(即深度(z))导致分割错误

我在这里做错了什么?

最佳答案

Second Question Now i thought,to use CImg by first reading the file myself and then handing over the pointer of buffer to Cimg using this code

CImg 数据格式:http://cimg.eu/reference/group__cimg__storage.html

如果你想从缓冲区手动初始化 CImg 对象,你应该自己设置这个数组。

这是 jpeg 图片的示例,对于其他格式,您可以查看来源(函数名称:_load_png_load_jpeg 等):

https://github.com/EyalAr/lwip/blob/master/src/decoder/jpeg_decoder.cpp

关于c++ - 二值图像数据上的 CImg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com