我有一系列 PNG 图像,它们使用颜色调色板中的索引(PNG 颜色类型 3)。在某些情况下,我需要制作一个图像副本,其中修改了调色板中的某些条目。通过这种方式,我们一遍又一遍地重新着色源 PNG。
在 Java 中,这是通过从 中获取 RGB 值IndexedColorModel
、修改值并创建一个新的IndexedColorModel
,并BufferedImage
使用源图像的光栅数据和新的颜色模型创建一个新的来处理的。
在 Actionscript 中,我必须读取 PNG 字节作为裸ByteArray
.,找到调色板块,修改值,然后让运行时从ByteArray
.
我现在希望通过 MonoTouch(我是新手)为 iOS 实现相同的系统,但我碰壁了。我相信 Actionscript 方法也可以在这里工作,但这次最好避免在如此低的级别上工作,而且看起来我可以接近。
如果我从 a 开始UIImage
,我可以使用UIImage.CGImage.ColorSpace
. 我可以验证它是一个带有索引的颜色模型colorSpace.Model
。我不确定的是如何获得调色板字节的实际数组。
然后另一方面,如何使用新调色板创建新图像?CGImage.WithColorSpace
看起来它会做我想要的......也许?然后我必须能够用我的新调色板创建一个色彩空间:表面上CGColorSpace.CreateIndexed
看起来像我想要的,但我不清楚baseSpace
参数是如何使用的。我想CGColorSpace
用我提供的全新调色板创建一个,然后将原始图像的索引与新调色板一起使用。也许我误解了确切CGColorSpace
的用途。