有没有办法将Image加载到具有每个像素的RGBA数据的三维int数组中? 例如60,20的像素是黑色的我希望[60] [20]的数组为0,0,0,100
答案 0 :(得分:1)
在处理视频时我已经做了一段时间,因为视频帧总是640x480(NTSC)。
您可以将RGBA声明为结构:
struct rgba {
unsigned char red;
unsigned char green;
unsigned char blue;
unsigned char alpha;
};
然后将您的数组声明为:
rgba image[640][480];
(注意:你可能想要反转高度和宽度,我会让你发现原因......)
负载变得像:
file.read(image, sizeof(image));
当然,这意味着文件数据格式正确:即同一" endian"等原始RGBA。在大多数情况下,不是图像保存在磁盘上的方式但是。
如glampert所述,一个库是ImageMagick。您还可以使用JPEG,PNG,GIF87a的特定加载程序......但是,在所有这些情况下,您不太可能直接在阵列中加载图像。您需要从某个Image对象缓冲区复制到您的阵列。
所以说你使用一个给你一个对象的库,可能是这样的:
Image img;
img.load(filename);
memcpy(image, img.data(), sizeof(image));
这是非常基本的代码,您应该测试load()是否有效,格式是否正确以及宽度x高度是否正确。