Apple プラットフォームの色空間間で色を変換することについて尋ねる質問がいくつかあります。残念ながら、答えには、OS X と iOS で互換的に使用できない移植性のない Objective-C クラスが含まれることがよくありNSColor
ますUIColor
。
ですから、そこに良い答えがあるに違いないと確信している非常に具体的なことをお聞きしたいと思います. Apple がこれの必要性を予見していなかったとは信じられません。
移植可能な Core Graphics 関数のみを使用しながら、CGColor
すべてのタイプをサポートする一般的な方法で、ある色空間 (モノクロなど) から別の色空間 (RGB など) に変換するにはどうすればよいでしょうか?CGColorSpace
いくつかのコンテキスト。オンライン サービスが提供する値に、 に格納されている値を掛ける必要がありますUIColor
。最終的にメソッドを導入した iOS5 以前の RGB コンポーネントを抽出する正しい方法-[UIColor getRed:green:blue:alpha:]
は、 を使用することCGColorGetComponents()
です。次に、この色にオンライン サービスから取得した色を掛けます。+[UIColor grayColor]
を生成するために が使用された場合、これは失敗しますUIColor
。つまり、色をグレースケール色空間から RGB に変換する必要があります。この場合は簡単です。提供されている他の色空間についてはどうですか?または、理論的な将来のシナリオで、単一のピクセルの色を処理したい場合はどうなりますか?
ピクセルをビットマップ コンテキストにペイントしてから、このピクセルを読み取るという提案がどこかにあります。それは非常識です。これが唯一の方法ではないことを願っています。明らかに、描画メソッドは変換を実行する方法を理解できます。ピクセルを描画するためだけにビットマップ コンテキストを作成せずに、これをどのように活用できますか?
追加の調査:
- 色変換に関するこの記事
UIColor
では、 の文書化されていない/非公開の方法は別-styleString
として、文書化されていない についても興味深いことに言及していますCGColorTransform
。 - WebKit の ColorCG.cppは、という名前のヘッダーがあることを示唆してい
CoreGraphics/CGColorTransform.h
ます。残念ながら、少なくとも Mountain Lion には、このヘッダーは存在しません。なぜ Apple はこれらの API を隠すのでしょうか? - 私が見つけた s に言及している唯一の賢明なリソース
CGColorTransform
は、Core Graphics のフリー/オープン ソース再実装である FreeQuartz です。
CGColorTransform
. _ とはいえ、私は息を止めていないので、他に賢明な提案があれば、私はすべて耳を傾けます.