簡體   English   中英

CImg 閱讀圖像

[英]CImg Reading Image

我正在做一個像 Bejewled 這樣的游戲的大學項目。 我們正在使用 OpenGL 和 CImg。 項目文件中包含以下 function:

    void ReadImage(string imgname, vector<unsigned char> &imgArray)
{
    using namespace cimg_library;
    CImg<unsigned char> img(imgname.c_str());
    imgArray.resize(img.height() * img.width() * 3, 0);
    int k = 0;
    unsigned char *rp = img.data();
    unsigned char *gp = img.data() + img.height() * img.width();
    unsigned char *bp = gp + img.height() * img.width();

    for (int j = 0; j < img.width(); ++j)
    {
        int t = j;
        for (int i = 0; i < img.height(); ++i, t += img.width())
        {
            imgArray[k++] = rp[t];
            imgArray[k++] = gp[t];
            imgArray[k++] = bp[t];
        }
        //imgArray[i][j] = img[k++];
    }
}

據我了解,顧名思義,這個 function 應該讀取圖像。 但我不知道如何使用它以及如何讀取圖像。 如果有人可以指導我,我將不勝感激。

編輯:這就是我調用 function 的方式:

vector<unsigned char> imgvec;
ReadImage("donut", imgvec);

這會導致錯誤:

[CImg] *** CImgIOException *** [instance(0,0,0,0,00000000,non-shared)] CImg<unsigned char>::load(): Failed to open file 'donut'.

您向它傳遞一個包含圖像文件名的字符串和對用於保存像素的向量的引用。 它打開圖像,調整矢量大小以適應每個像素 3 個字節的 RGB,並按順序用像素填充矢量:

RGBRGBRGBRGBRGB

真的就是這樣。 基本上,CImg 以平面方式保存像素……所有紅色像素,然后是所有綠色像素,然后是所有藍色像素。 這會將它們重新排序為 RGB 三元組 - 大概是因為這就是OpenGL需要它們的方式。

暫無
暫無

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

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