2

我正在开展一个项目,将打包成专有容器格式的图像转换为单独的 PNG 图像,然后将其重新打包成更灵活的容器格式。一个比较奇怪的限制是颜色表条目的顺序对于最终应用程序的正确操作至关重要(某些图像的调色板取决于当前显示的其他图像的调色板)。

有什么方法可以直接操作 PNG 的颜色图,最好是在 Perl 中?我正在使用 PerlMagick 逐像素生成 PNG 文件。如果更直接地描述我在做什么对我有帮助,请告诉我。

(由于马克的建议,对此进行了扩展)

屏幕首先填充了背景元素,如装饰框和罗盘玫瑰。罗盘的一部分会亮起,以指示玩家可以去哪个方向。这些亮起的部分是单独的图像,它们从背景元素图像的颜色图中的特定插槽中获取颜色提示。因此,背景元素的颜色图的内容和顺序至关重要。

(甚至更多扩展)

我会准确地列出我现在正在做的事情。最初的容器格式是 Infocom 在 1980 年代后期为其图形文本冒险创建的。对于每个图形游戏,制作了三个图形文件,一个用于 CGA、EGA 和 MCGA。一些 EGA 图形文件分布在两个容器中。为了在现代 Z 机器解释器上播放,格式被逆向工程,其中的图形被转换为 PNG 并重新打包到 Blorb 容器中(https://www.eblong.com/zarf/blorb/)。第 11.3 节讨论了颜色变化的行为。只是 MCGA 包是这样重新包装的。我想为 CGA 和 EGA 包创建包。不幸的是,我无法联系准备这些 Blorb 文件以获取有关此颜色图问题的信息的人。Infocom 格式的逆向工程似乎丢失了。所以我使用了现有的工具,主要pix2gif.c来自 Ztools ( http://ifarchive.org/indexes/if-archive/infocom/tools/ztools/ ) 并将其翻译成 Perl 以便更好地理解它。通过这个 Perl 程序,我设法提取了 EGA 和 CGA 数据。我修改了自己的工具 ( https://gitlab.com/DavidGriffith/blorbtools ) 以支持这些游戏的特殊要求。

从针对 MCGA 的图形开始,我无法复制使用此处提供的较旧 Blorb 文件玩游戏的外观:http: //ifarchive.org/indexes/if-archive/infocom/media/blorb . 调色板不断变化的图像用错误的颜色绘制。EGA 和 CGA 图形还有其他问题,但与分辨率有关,与此处无关。

这些涉及的具体游戏是Infocom 的游戏“亚瑟”、“幕府将军”、“旅程”和“Zork Zero”。我维护了一个能够玩这些游戏的 Z 机器解释器,可以在https://gitlab.com/DavidGriffith/frotz找到。

4

0 回答 0