简体   繁体   中英

CImg on binary image data

I created a binary file after taking a snapshot using X11 xGetImage and stored contents of data field in a binary file (The file has been zipped. Please uncompress it). Now, i was playing around a bit with CImg and learning its usage.

First Question

So, i tried CImg on this binary data using load_rgba function

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);

Now, i can see the image in the window, but there is a loss of quality. so i tried to have a look at the code and found that

at line 34318

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

and why it only works when float is passed for template??

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

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;   
}

Running this code on same imagedata(as in first case), all i get is a black window. Moreover setting 4th parameter(ie depth(z)) result in segmentation fault

What am i doing wrong here?

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 data format: http://cimg.eu/reference/group__cimg__storage.html

If you want to init CImg object from buffer manually you should set up this arrays by yourself.

This is an example for jpeg image, for other formats you can check sources (functions names: _load_png , _load_jpeg etc.):

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM