首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CImg读取图像

CImg读取图像
EN

Stack Overflow用户
提问于 2020-05-19 18:34:21
回答 1查看 439关注 0票数 1

我正在做一个大学项目,就是制作一款像电子珠宝一样的游戏。我们使用的是OpenGL和CImg。Project文件中包含以下功能:

代码语言:javascript
复制
    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++];
    }
}

据我所知,顾名思义,这个函数是用来读取图像的。但我不知道如何使用它,也不知道如何阅读图片。如果有人能指导我,我会很感激的。

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

代码语言:javascript
复制
vector<unsigned char> imgvec;
ReadImage("donut", imgvec);

它会导致一个错误:

代码语言:javascript
复制
[CImg] *** CImgIOException *** [instance(0,0,0,0,00000000,non-shared)] CImg<unsigned char>::load(): Failed to open file 'donut'.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 18:51:24

您可以传递给它一个包含图像文件名的字符串和一个用于保存像素的向量的引用。它打开图像,调整矢量大小以容纳每个像素3字节的RGB,并按顺序填充矢量:

代码语言:javascript
复制
RGBRGBRGBRGBRGB

这才是真正的。基本上,CImg以平面的方式保存像素.所有的红色像素,然后所有的绿色像素,然后所有的蓝色。这会将它们重新排序为RGB三胞胎--大概是因为这就是OpenGL需要它们的方式。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61898281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档