繁体   English   中英

在 ImageSharp 中使用调色板/索引图像

[英]Working with palette / indexed images in ImageSharp

对于旧版游戏,我需要加载 BMP(或 PNG)调色板格式的图像并更改调色板上的某些众所周知的索引(例如使用绿色阴影替换使用索引 0-8 的红色渐变,以更改 colors一个单位)。 单独进行颜色替换是不够的,因为同一种颜色可能会被多个单元特征使用。

因此是否可以加载调色板图像并将颜色索引保留在 ImageSharp 中? 当我使用Image.Load("FileName")加载我的调色板单元图像时,它总是以 Argb32 模式加载,并且调色板丢失了。 在 Photoshop 中,相同的图像在索引模式下正确加载。 另外,我不确定可以使用哪些属性来查看/编辑调色板。

我在网上没有找到关于该主题的太多信息。 我看到文档中有一个类型IndexedImageFrame<TPixel> ,但我不确定该类型是否/如何有助于解决上述问题。

感谢您的任何提示!

当我使用Image.Load("FileName")加载调色板单元图像时,它始终以 Argb32 模式加载

实际上,如果加载 png 将是Rgba32 (尽管这可能会在未来发生变化)。 为了保证像素格式,您应该使用通用变体。

在 Photoshop 中,相同的图像在索引模式下正确加载。

那不是 PhotoShop 正在做的事情。 他们正在捕捉调色板并将其展示给您。 对于任何像素格式,实际的 canvas 格式都是相同的。

ImageSharp 也是如此。 解码后的图像是TPixel的 2D 缓冲区,但我们在解码时捕获元数据并使用它来通知编码器以何种像素格式保存对图像进行编码。

也就是说......目前恐怕不支持在解码时捕获当前调色板。 如果您想在GitHub 存储库中提出问题,我们可能会考虑 V2。

如果您有该信息要捕获然后调整/保存,则可以在图像编码期间使用具有更新调色板的 PaletteQuantizer。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM