【问题标题】:Load an Image into RGBA array C++将图像加载到 RGBA 数组 C++
【发布时间】:2014-10-07 12:45:47
【问题描述】:

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

【问题讨论】:

  • 你的意思是如果语言中有一个标准函数或库?如果是这样,答案是否定的。不过,有许多第三方库可以做到这一点。这是一个:imagemagick.org
  • “图片”是什么格式的。
  • 您的示例使用 2D 语法索引 3D 数组。您的意思是您希望 [60,20,0] 为 0,[60,20,1] = 0, ..., [60,20,3] = 100。

标签: c++ image converter


【解决方案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));

当然,这意味着文件数据的格式正确:即原始 RGBA 采用相同的“字节序”等。不过,在大多数情况下,图像在磁盘上的保存方式并非如此。

正如 glampert 所提到的,ImageMagick 是一个库。您还可以为 JPEG、PNG、GIF87a 使用特定的加载器……但是,在所有这些情况下,您不太可能直接将图像加载到数组中。您需要从某个 Image 对象缓冲区复制到您的数组。

假设你使用了一个为你提供对象的库,可能是这样的:

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

这是非常基本的代码,您应该测试 load() 是否有效,格式是否正确,宽度 x 高度也是否正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多