私は現在、iOSからAndroidにアプリケーションを移植していますが、画像処理に関していくつかの問題が発生しました。
特定のベースビットマップに特定の順序で適用されるImageOverlaysとColorOverlaysで構成されるフィルタークラスがあります。各ColorOverlaysには、RGBカラー値、BlendModeId、およびアルファ値があります。各ImageOverlayには、画像ビットマップ、BlendModeId、およびアルファ/強度値があります。
私の主な問題は、iOSから取得した次のブレンドモードをサポートする必要があることです。
- CGBlendModeNormal
- CGBlendModeMultiply
- CGBlendModeScreen
- CGBlendModeOverlay
- CGBlendModeDarken
- CGBlendModeLighten
- CGBlendModeColorDodge
これらの中には、Androidに対応するPorterDuff.Modeタイプがあるものと、ないものがあります。さらに悪いことに、存在するモードのいくつかはAndroidの最近のバージョンで導入されており、APIレベル8で実行する必要があります。
モードを最初から作成しようとすると、非常に非効率的です。
さらに、API8に存在するモードを使用しても、2つの画像をブレンドするが、マスクの強度(ImageOverlayからのアルファ値)を指定できるメソッドを見つけることができませんでした。同様にColorOverlaysを使用します。
私がAndroidで複製しようとしているiOS機能は
CGContextSetBlendMode(...)
CGContextSetFillColorWithColor(...)
CGContextFillRect(...) - This one is easy
CGContextSetAlpha(...)
私は、これらのブレンドモードとアルファ操作をサポートする小さなサードパーティライブラリを調べ始めました。最も有望なものは、おそらくImageMagickの移植であるpoelocesarのlib-magickでした。
lib-magickは(と呼ばれるCompositeOperator
)必要なブレンドモードのほとんどを提供しましたが、強度値を設定したり、ブレンドモードでカラーフィルを実行したりする方法を見つけることができませんでした。
誰かが以前にこの問題を抱えていたと確信しています。どんな助けでもいただければ幸いです。ところで、プロジェクトの仕様では、OpenGLESに入ることが禁止されています。