加载图像到RGBA数组c++

Load an Image into RGBA array C++

本文关键字:数组 c++ RGBA 图像 加载      更新时间:2023-10-16

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

我在做视频的时候就这样做过,因为视频帧总是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));

当然,这意味着文件数据的格式是正确的:即相同"端序"的原始RGBA,等等。但是,在大多数情况下,映像不是这样保存在磁盘上的。

正如glampert所提到的,一个库是ImageMagick。你也可以使用JPEG, PNG, GIF87a…然而,在所有这些情况下,您都不可能直接在数组中加载图像。您需要从某个图像对象缓冲区复制到您的数组。

假设你使用一个库给你一个对象,可能是这样的:

Image img;
img.load(filename);
memcpy(image, img.data(), sizeof(image));

这是非常基本的代码,您应该测试load()是否工作,格式是否正确,宽度和高度是否正确