色のパレットへのインデックスを使用する一連の PNG 画像があります (PNG カラー タイプ 3)。場合によっては、パレットのエントリの一部が変更された画像のコピーを作成する必要があります。このようにして、ソース PNG の色を何度も変更します。
Java では、これは から RGB 値を取得し、IndexedColorModel値を変更して新しいIndexedColorModelを作成BufferedImageし、ソース イメージのラスター データと新しいカラー モデルを使用して新しい を作成することによって処理されます。
Actionscript では、PNG バイトを裸の として読み込みByteArray、パレット チャンクを見つけ、値を変更し、ランタイムに から画像をロードさせる必要がありましたByteArray。
私は現在、MonoTouch (私は初めてです) を介して iOS 用に同じシステムを実装しようとしていますが、壁にぶつかりました。Actionscript のアプローチはここでもうまくいくと思いますが、今回はそれほど低いレベルでの作業は避けたほうがよいでしょう。
から開始する場合UIImage、 で色空間を取得できますUIImage.CGImage.ColorSpace。インデックス付きカラー モデルであることを確認できますcolorSpace.Model。私が確信していないのは、パレットバイトの実際の配列を取得する方法です。
反対に、新しいパレットを使用して新しい画像を作成するにはどうすればよいですか? CGImage.WithColorSpaceそれは私が望むことをするように見えます...多分?次に、新しいパレットで色空間を作成できるようにする必要があります。表面的には、希望どおりに見えますが、パラメーターがCGColorSpace.CreateIndexedどのように使用されているかわかりません。baseSpace私が提供するまったく新しいカラー パレットで を作成しCGColorSpace、新しいパレットで元の画像のインデックスを使用したいと考えています。多分私は何CGColorSpaceのために使われるかを正確に誤解しています。