sdlpal精灵素材内存截取并保存到硬盘
作者:互联网
github地址
https://github.com/sdlpal/sdlpal
简单阅读了一下源码,虽然项目用到了stb_image.h,但是我们还需要stb_image_write.h来写文件,所以还得再搞一下
https://github.com/nothings/stb
打开项目文件
sdlpal_20220502\win32\sdlpal.sln
确保先能编译,并正确运行,我以DOS仙剑为例测试的
项目中加入stb_image_write.h的include路径
打开 palette.c 文件,头部加入
#define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h"
加入全局变量
SDL_Color pe_palette[256]; int pe_palette_ready = 0; static int bOnce_day = 0; static int bOnce_night = 0; static int bRec_day = 0; static int bRec_night = 0; static int pe_id = 0;
在下面的 PAL_GetPalette 函数中找到 palette 部分代码,修改如下
for (i = 0; i < 256; i++) { palette[i].r = buf[(fNight ? 256 * 3 : 0) + i * 3] << 2; palette[i].g = buf[(fNight ? 256 * 3 : 0) + i * 3 + 1] << 2; palette[i].b = buf[(fNight ? 256 * 3 : 0) + i * 3 + 2] << 2; if (iPaletteNum == 0) { if (pe_id == 1) { pe_palette[i].r = palette[i].r; pe_palette[i].g = palette[i].g; pe_palette[i].b = palette[i].b; } } #if 0 palette[i].r += (255 - palette[i].r) / 5; palette[i].g += (255 - palette[i].g) / 5; palette[i].b += (255 - palette[i].b) / 5; #endif } if (iPaletteNum == 0) { if (!fNight) { if (bRec_day) { if (pe_id == 1) { if (!bOnce_day) { bOnce_day = 1; char* peOutFile = "pat_0_day.png"; int w = 256; int h = 1; int n = 4; unsigned char* data = malloc(w * h * n); if (data != 0) { for (int i = 0; i < 256; i++) { data[i * 4 + 0] = palette[i].r; data[i * 4 + 1] = palette[i].g; data[i * 4 + 2] = palette[i].b; data[i * 4 + 3] = 255; } stbi_write_png(peOutFile, w, h, n, data, w * n); free(data); } } } } if (pe_id == 1) { pe_palette_ready = 1; } pe_id++; } //night palette else { if (bRec_night) { if (!bOnce_night) { bOnce_night = 1; char* peOutFile = "pat_0_night.png"; int w = 256; int h = 1; int n = 4; unsigned char* data = malloc(w * h * n); if (data != 0) { for (int i = 0; i < 256; i++) { data[i * 4 + 0] = palette[i].r; data[i * 4 + 1] = palette[i].g; data[i * 4 + 2] = palette[i].b; data[i * 4 + 3] = 255; } stbi_write_png(peOutFile, w, h, n, data, w * n); free(data); } } } } }
标签:palette,stb,int,截取,sdlpal,static,image,硬盘 来源: https://www.cnblogs.com/kileyi/p/16622650.html