任何人都可以指出一个方向,以便我可以获取我拥有的 PNG 图像并读取它们,然后将 PNG 图像的数据存储到一个数组或向量(或其他一些数据结构)中,这样我就可以在我的代码而不是必须阅读PNG等?
我知道我可以使用 libPNG 来读取图像,但是一旦读入,我对如何获取读入的内容并将其转换为我可以在游戏中使用的数据结构感到有些困惑。
所以我的想法是我可以编写一个简单的控制台程序,我提供一个 PNG 列表,它读取它们并将数据吐出到一个文件中,以便我在实际游戏中硬编码到数据结构中。
任何人都可以指出一个方向,以便我可以获取我拥有的 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 中以节省 ram 空间。
加载图像;获取它的宽度、高度和位深度(如果需要,可能还有更多信息);读取其颜色数据,并保存您提取的信息。
数据结构的示例:
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...);