2

私は現在Androidアプリケーションに取り組んでいます。主に drawBitmap メソッドを使用して、すべての描画を Canvas オブジェクトに行います。私が達成しようとしている現在の効果は、2 つのビットマップ間で「クロスフェード」することです。2 つのビットマップは類似したイメージで、外側の部分だけが異なります。クロスフェードにより、同一の内側の部分は同じままである必要がありますが、外側の領域はある状態から別の状態にフェードしているように見えます。利用可能なそれぞれの PorterDuff.Modes を見ましたが、私が望む正確な効果に合うものはありませんでした。基本的に、私が実装しようとしている方程式は次のとおりだと思います。

w = 重み (0 から 1) a_i、c_i = 画像 i のアルファ値とカラー値 = 1 と 2

(a1, c1) +(w) (a2, c2) = ((1-w)*a1 + w*a2, ((1-w)*a1*c1 + w*a2*c2) / ((1-w) w)*a1 + w*a2))

(もちろん、ゼロ除算の場合も考慮する - これは基本的に 2 つの画像の重み付けされた「平均化」です)

これを実装するために「カスタム」PorterDuff モードを作成する方法はありますか? これを実装するより効率的な方法がある場合、各ビットマップのカラー配列を抽出し、各フレームでそれらを手動でループしてこの変換を行う必要はありません。

誰かがこれを効率的に行う方法を知っているか、私が知らない別の方法を知っていて、オンラインで見つけることができなかった場合、それは非常に高く評価されます. また、私の変換がこのタスクに不適切であると思われる場合は、あなたの批判も歓迎します.

PSアルファ値だけを補間して両方の画像をそのまま描画しようとしましたが、たとえば補間の途中で、通常は1である領域で両方のアルファ値が0.5になり、2つの0.5アルファ画像を描画すると透明になります、これは私が望むものではありません。通常の ADD 操作では色が飽和してしまいますが、これも望ましくありません。

4

0 に答える 0