在c++中嵌入PNG图像作为矢量或数组

embedding a PNG image in C++ as a vector or array

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

谁能给我指出一个方向,这样我就可以采取PNG图像,我有并读取它们,然后将PNG图像的数据存储到数组或矢量(或其他一些数据结构),所以我可以在我的代码中实际使用,而不是在PNG中读取,等等?

我知道我可以使用libPNG读取图像,但一旦读取,我有点难倒如何读取并将其转换为我可以在游戏中使用的数据结构。

所以我的想法是我可以编写一个简单的主机程序,我输入一个PNG列表,它读取它们并将数据输出到文件中,以便我将其硬编码到实际游戏中的数据结构中。

在像Jason所说的那样读取数据后,您可以使用结构体来包含每个像素的数据。

struct RGBAQUAD
{
     int Red;
     int Green;
     int Blue;
     int Alpha;
}

然后你可以创建一个像这样的二维数组,将所有的像素结构表示为一个连续的图像。但是这样做的一个缺点是必须管理内存。

RGBQUAD **arr = 0;
arr = new RGBQUAD *[y];
for(int i  = 0; i < y ; i++)
    arr[i] = new RGBQUAD[x];

或者您可以将一个像素打包到单个int中以节省内存空间。

加载图片;取其宽度,高度和位深度(如果需要,可能还有更多信息);读取其颜色数据,并保存您提取的信息。

数据结构的示例:

int width;
int height;
int bits;
std::vector<int> data[width*height*bits];

当你使用这个数据结构时:

/*
   Before these lines, you must get image dimensions and save them to width, height, depth variables. (either read them from somewhere or simply assign e.g. width=1024 if you know the width (I assume you do, as you're going to hardcode the image)).
*/
std::vector<int> sprite(width*height*depth);
for (int i = 0; i < width*height*depth; i++)
   // sprite[i] = (read pixel i from somewhere...);