簡體   English   中英

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

在相同的imagedata上運行此代碼(如第一種情況),我得到的只是一個黑色窗口。 此外,設置第四個參數(即depth(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM