0

我目前正在开发一款古老的经典 PC 游戏。随着我的发展,编程面临很多问题,主要是因为我没有受过程序员或设计师的教育。尽管我对这款特定游戏的热情让它变得如此出色。

我目前正在尝试打开游戏的图像。这些图像是使用 Paint Deluxe 2 制作的。据我所知,当您打开它们以添加更改时,它们都是 PCX 格式的。然后它们以 .bmp 文件的形式保存在可执行文件旁边的外部实现中(据我所知)。使用 6 位通道(不是您所期望的 8 位)所使用的调色板实际上有点奇怪。

我面临着开发人员的做法问题。在将图像添加到文件之前,会去掉标题,并将调色板存储在外部文件中。由于 Paint Deluxe 2 将像素长度保存为 190x107 到 20544 字节(189x107-190x107-191x107 和 192x107 都存储为 20544 字节的像素,不包括标题和调色板)。而 is 实际上应该是 20330 字节。这让我有些头疼。以及似乎用于游戏的图像在某种程度上是相反的。看起来图像以某种方式以相反的方向存储。

澄清一下:FILE34 是 20330 字节,是游戏加载到屏幕上的 ORGINAL 文件。FILE34 是 20544 字节,是我在将文件更改回 pcx 格式然后再更改为 bmp 格式后剥离文件时得到的结果。pcx 文件也包括在内,例如可以用 GIMP 打开。BIN_PALETTE.PAL 是用于图像的调色板。

有没有人熟悉这个问题,可以给我一些建议吗? 在此处输入链接描述

4

1 回答 1

0

BMP 文件通常自下而上存储(最后一个扫描线首先存储,全部向上,直到第一个扫描线)。较新的 BMP 文件也可以像其他格式一样自上而下存储,但这不太常见。如果游戏文件是自上而下存储的,与普通的 BMP 文件相比,它们将显示为上下颠倒。

此外,BMP 格式将每个扫描线填充到 32 位(长字)边界,这就是为什么宽度为 189-192 的文件大小相同(每个扫描线都需要 192 字节)。如果游戏文件存储时没有此填充,这就是差异的原因。

有关详细信息,请参阅Wikipedia 上的BMP 文件格式

将无标题的 BMP 重写为游戏中使用的格式非常容易(因为这是唯一的两个区别)。我将概述过程/使用伪代码,因为您的问题中没有语言标签:

  • 将整个 BMP 数组读入内存 (192 x 107)。
  • 创建一个可以保存输出的新数组 (190 x 107)
  • 循环遍历原始行
    • 对于每一行,复制前 190 个字节(跳过 2 个填充字节)
    • 将这些字节存储到新数组中,但从末尾填充
  • 将结果字节写入磁盘

(如果对您有帮助,我可以用 Java 编写以上内容)。

于 2016-05-19T10:28:47.687 回答