3

私は現在、iOSからAndroidにアプリケーションを移植していますが、画像処理に関していくつかの問題が発生しました。

特定のベースビットマップに特定の順序で適用されるImageOverlaysとColorOverlaysで構成されるフィルタークラスがあります。各ColorOverlaysには、RGBカラー値、BlendModeId、およびアルファ値があります。各ImageOverlayには、画像ビットマップ、BlendModeId、およびアルファ/強度値があります。

私の主な問題は、iOSから取得した次のブレンドモードをサポートする必要があることです。

  1. CGBlendModeNormal
  2. CGBlendModeMultiply
  3. CGBlendModeScreen
  4. CGBlendModeOverlay
  5. CGBlendModeDarken
  6. CGBlendModeLighten
  7. 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に入ることが禁止されています。

4

2 に答える 2

2

jniにそれを実装することは、以前に予想されていたほど苦痛ではなかったことがわかりました。次のリンクにすべての詳細があります。

Photoshopは2つの画像をどのようにブレンドしますか?

于 2012-06-03T17:34:45.293 に答える
2

私は電子メールであなたを助けましたが、誰かがもっと説明を求めた場合に備えて、私もあなたの質問に投稿したいと思いました:-)

2.2はAPIレベル8で、NDKの「libjnigraphics」ライブラリをサポートしています。これにより、ビットマップオブジェクトのピクセルバッファにアクセスできます。これらのブレンドは手動で行うことができます。これらは非常に単純な数学計算であり、非常に迅速に行うことができます。

Android JNIビットマップ情報については、このサイトをチェックしてください。

非常に簡単です。必要なパラメーター(カラー値またはブレンドする別のビットマップオブジェクト)を使用してJNIメソッドblend()を作成し、そのビットマップのピクセルバッファーをロックし、必要な計算を実行して、ビットマップのロックを解除します。 リンク

ただし、565のシフト/計算は8888とは異なるため、メモリ内のビットマップの形式に注意する必要があります。正確に表示されない場合は、この点に注意してください。

于 2012-06-19T14:51:50.200 に答える