CImg阅读图像
CImg Reading Image
我正在做一个大学项目,就是制作一个像Bejewled这样的游戏。我们正在使用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需要它们的方式。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何使用CImg打开图像?
- CImg阅读图像
- 如何使用CIMG.H库在另一个图像上显示一个图像
- 如何将CIMG图像对象从C /CLI传递到C#
- 示例文件中的CImg图像加载错误
- CImg 库在旋转时创建失真的图像
- CImg保存图像会更改值
- CIMG 图像替换
- CImg - 获取图像的反向 FFT
- CImg读取图像异常
- CImg:图像二值化结果失败
- 如何使用CImg显示少量图像(每个图像在单独的窗口中)
- 我如何显示一个临时图像与CImg库
- 图像文件到矢量像素与CImg
- 对二进制图像数据的CImg
- CImg图像为无色