14

Android の問題を解決しようとしていColorFiltersます。ドキュメンテーションは非常に貧弱であるため、主な方法はさまざまなバリエーションを試すことです。

問題:

ビットマップがあります。alpha=255 のピクセルもあれば、alpha=0 のピクセルもあります。特定の色で円を描こうとしています。ビットマップでアルファチャンネルを変更せずに、描画中にビットマップアルファに色を乗算したい。

したがって、円を描いている間、アルファ= 0のピクセルをペイントしないで、アルファ= 255のピクセルを希望の色でペイントします。アルファチャンネルは変更しないでください。

porter-duff ColorFilter (Android SDK の PorterDuffColorFilter クラス) を使用しようとしています。

ここの公式サイトにはモードが多すぎて理解できない説明があります:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

DST_ATOPまたはを使用する必要があると思いますSRC_ATOPが、説明したように機能しません。

srcColorまた、 porter-duff colorfilter のコンストラクタには奇妙なパラメータがあります。

式中の「さ」と「さ」の意味がわかりません[Da, Sc * Da + (1 - Sa) * Dc]。colorfilter コンストラクターに渡された色から取得することも、「paint.setColor」で設定された色にすることもできます。

誰が知っていますか、それがどのように機能するのですか?

4

3 に答える 3

10

SaScは、それぞれ「ソース アルファ」と「ソース カラー」の略です。コンストラクターのsrcColorパラメーターは、PorterDuffColorFilterこれらの値に使用される色です。

あなたの場合、Mode.MULTIPLYおそらく最もうまくいくでしょう。

于 2012-04-20T12:02:12.917 に答える
5

Porter-Duffモードは、事前に乗算されたアルファで正しく機能するようにのみ定義されていることに注意してください。つまり、R、G、またはBコンポーネントのいずれもアルファ値を超えることはできません。

すべてのPorter-Duffモードを披露するAndroidプロジェクト用のGitHubプロジェクト。AndroidアプリはPlaystoreでも入手できます。

于 2012-04-22T07:31:27.377 に答える
1

いくつかの調査の後、Android の PorterDuff Color モードに関する次の結論に達しました。

  • Sa と Sc はソース アルファとソース カラーです。たとえば、ColorFilter を myDrawable.setColorFilter(desiredColor,Mode.SRC_ATOP) のようなドローアブルに設定している場合、Sa と Sc の値は myDrawable からではなく、desiredColor から取得されます。Da と Dc は、myDrawable の元のアルファ値とカラー値になります。
  • イメージがあり、ユーザー入力からアルファ値を使用して特定の色を適用したいと考えています。私は PorterDuff Modes を使用しようとしました。元の myDrawable は 9 パッチのドローアブルで、透明な背景とメッセージング バブルの三角形のような角のある角がありました。私が使用したとき

    public static final PorterDuff.Mode SRC [Sa, Sc]

これは、ソース カラーとソース アルファを適用します。これは、上記の setColorFilter メソッドの Color と Alpha の値であると想定しました。そのため、ColorMatrixFilter を使用してマトリックスをセットアップし、アルファ値を個別に描画可能に設定する必要がありました。

于 2012-12-16T18:46:13.070 に答える