将图像加载到RGBA数组C ++中

时间:2014-08-14 00:35:47

标签: c++ image converter

有没有办法将Image加载到具有每个像素的RGBA数据的三维int数组中? 例如60,20的像素是黑色的我希望[60] [20]的数组为0,0,0,100

1 个答案:

答案 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高度是否正确。