ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

sdlpal精灵素材内存截取并保存到硬盘

2022-08-24 23:34:47  阅读:248  来源: 互联网

标签:palette stb int 截取 sdlpal static image 硬盘


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有