我正在尝试将SDL_surface转换为我自己的Color结构:
struct Color
{
uint8_t r, g, b, a;
explicit Color(const uint8_t p_r = 0, const uint8_t p_g = 0, const float uint8_t = 0, const uint8_t p_a = 255);
};
我要做的是:
将png文件加载到SDL_Surface。
SDL_Surface * img = IMG_Load("pngfilePath.png");
将SDL_Surfaceformat转换为RGBA格式
SDL_Surface * rgbaImage = SDL_ConvertSurfaceFormat(img, SDL_PIXELFORMAT_RGBA32, 0);
将内存分配给我的“颜色”数组
Color *palette = new Color[rgbaImage->w * rgbaImage->h];
最后,我想将所有png颜色信息复制到我的“颜色”数组中。
我现在正处于这个阶段。
uint32_t* pixels = static_cast<uint32_t *>(rgbaImage->pixels);
uint8_t r, g, b, a;
for(int i = 0; i < rgbaImage->h; ++i)
{
for(int j = 0; j < rgbaImage->w; ++j)
{
SDL_GetRGBA(pixels[j + i * rgbaImage->w],
rgbaImage->format, &r, &g, &b, &a);
palette[j + i * rgbaImage->w].r = r;
palette[j + i * rgbaImage->w].g = g;
palette[j + i * rgbaImage->w].b = b;
palette[j + i * rgbaImage->w].a = a;
}
}
这就是我想将所有信息保存到我的“颜色”结构中的方法。
有更有效的方法吗?似乎SDL_GetRGBA功能很慢。