CImg阅读图像

CImg Reading Image

我正在从事一个大学项目,该项目旨在制作像宝石迷阵这样的游戏。我们正在使用 OpenGL 和 CImg。项目文件中有以下功能:

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

据我了解,顾名思义,此函数应该读取图像。但我不知道如何使用它以及如何读取图像。如果有人能指导我,我将不胜感激。

编辑: 这就是我调用函数的方式:

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.

需要它们的方式