将调色板颜色的16x16真彩色图像转换为实际的调色板文件

时间:2018-09-03 03:58:16

标签: python c++ linux image-processing bitmap

背景:我正在尝试浏览旧游戏存档文件中的资产。它们是8位的。我需要一个调色板使它们看起来正确。

  • 我有调色板。 DxWnd支持转储活动调色板。

  • 但是,调色板是对话框形式,具有16x16色(= 256)的拉伸。

Original output

[已更新为包含实际输出]

  • 然后我将它们缩小为每种颜色单个像素。所以现在我有一个16x16(真彩色)位图。

我想从中获取一个调色板文件。我不知道是否有调色板的标准格式,或者仅仅是(256 * 3 RGB)字节的纯旧数据。 GIMP支持一种调色板格式,您可以在导入“原始图像数据”时将其导入。

所以,问题是:将这个16x16真彩色图像转换为3x256字节调色板的块的最简单方法是什么?

是工具,Python,C / C ++还是其他。关键是,这是一个小问题(“错误的数据格式”)。因此,如果可以使用某些现有工具(Linux或Windows),则一定可以。

要绝对清楚:这不是精灵。无需将其启发式转换为某些“最合适”的调色板。字面上就是调色板。

[edit]我尝试根据注释从GIMP和IrfanView输出调色板,但是我得到了这些混乱的颜色集:

Jumbled result after 8-bit conversion

1 个答案:

答案 0 :(得分:0)

ImageMagick将提供原始的256 * 24位RGB图像,当从图像中打开原始图像时,GIMP可以将其用作调色板:

convert UEw8E.png -resize '16x16!' -filter point -depth 8 palette.rgb

!表示强制设置大小,而不考虑纵横比,因为您的图像不是正方形。-filter point会跳过下缩放滤镜。-depth 8会强制每种颜色使用8位。尽管您的图像已经是每种颜色8位,但是最好确定要输出哪种格式。)

创建的文件palette.rgb是图像中从左到右,从上到下的每个颜色8位(24位RGB)调色板的原始数组。 (我想是您要的)

现在使用设置打开GIMP(经2.8.22测试)的任何原始图像

  • 图像类型:已索引
  • 调色板类型:R,G,B(正常)
  • 调色板文件:palette.rgb

GIMP内的调色板如下所示(一切与图像中的顺序相同):
the palette inside GIMP