对二进制图像数据的CImg
CImg on binary image data
我使用X11-xGetImage拍摄快照后创建了一个二进制文件,并将数据字段的内容存储在二进制文件中(该文件已压缩。请解压缩)。现在,我在玩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))会导致分割故障
我在这里做错了什么?
第二个问题现在我想,通过首先读取文件来使用CImg我自己,然后用这个把缓冲区的指针交给Cimg代码
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++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试使用 CImg 库 (C++) 制作实时数据绘图器
- 使用CImg-Visual C++2008编辑RGB像素数据
- 对二进制图像数据的CImg