2012-04-20 5 views
14

私はandroid ColorFiltersで問題を解決しようとしています。ドキュメンテーションは非常に貧弱なので、主な方法はさまざまなバリエーションを試しています。Android ColorFilter - Porter-Duffモード

問題:

ビットマップがあります。いくつかのピクセルはアルファ= 255を持ち、他のピクセルはアルファ= 0を持つ。私は特定の色で円を描こうとしています。私はアルファチャンネルをビットマップに変更しないようにしたいが、描画中はビットマップアルファに色を掛けたい。円を描きながら

だから、私はアルファ= 0のピクセルが塗らないことがしたいのですが、アルファ= 255の画素は、私が欲しい色でペイントされます。アルファチャンネルは変更しないでください。

私はポーター・ダフカラーフィルター(アンドロイドSDKのPorterDuffColorFilterクラス)を使用しようとしています。

あまりにも多くのモードとここに公式サイト上の無理解可能な説明があります:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html

は私がDST_ATOPまたはSRC_ATOPを使うべきだと思うが、私は説明したように、彼らは動作しません。

また、ポーター・ダフのカラーフィルターのコンストラクタで奇妙なパラメータsrcColorあります。

私は「SA」と「Scが」公式[Da, Sc * Da + (1 - Sa) * Dc]に何を意味するのか理解できません。これは、カラーフィルタコンストラクタに渡されたカラーからもできます。また、 "paint.setColor"によってカラーセットできます。

誰も知っている、どのように動作するのですか?

+0

これらのモードの意味をGoogleのポッターダフで確認できます。 – Renard

+1

この素晴らしい文書では、PorterDuffの画像について説明しています。http://ssp.impulsetrain.com/porterduff.html Androidのように「src_」を追加しないように注意してください:so "IN" = "SRC_IN" –

答えて

10

SaScは、それぞれ、「ソース・アルファ」及び「ソース色」のためにショートパンツです。 PorterDuffColorFilterコンストラクタ内のsrcColorパラメータは、これらの値に使用される色です。

あなたのケースでは、Mode.MULTIPLYがおそらく最も効果的でしょう。

+0

しかしpaint.setColorそれに影響を与える?私はそれを変更しようとし、それが影響を受けることを理解しました!私はそれがそのような配合式にあるべきだと思いますか? – user1038085

+0

また、この場合、乗算モードは機能しません。アルファチャンネルが0のピクセルも描画されます:( – user1038085

+0

私はこの部分については完全にはわかりませんが、あなたのペイントに色を設定すると、この値は何らかの点でsrc/dst引数のいずれかに含まれると思いますあなたのケースでは、色アルファもあなたの場合の計算に取り込まれ、すべてが1.0-alphaの固体になっているようです。ペイントに色を設定しないでビットマップを描画してください。 – Jave

5

Porter-Duffモードは、事前乗算されたアルファで正しく動作するようにのみ定義されています。つまり、R、G、またはB成分のいずれもアルファ値を超えることはできません。

GitHub projectすべてのPorter-Duffモードを示すAndroidプロジェクト用です。 Android AppはPlaystoreでも入手できます。私は、AndroidでPorterDuffのカラーモードに関する結論を次のように来て、いくつかの研究の後

+0

アプリは数式がどのように画像にうまく影響するかを示しています。より単純な画像を含めると良いでしょう。オプションとして。 –

1

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

    public static final PorterDuff。モードSRC [サ、Scの]ソースの色と私は上記setColorFilter法desiredColorの色とアルファ値を仮定ソースアルファを、適用

は、私はすなわち色とアルファが正しく新しいに適用された正確な色の値を得ました描画可能であるが、その画像上の三角形は完全に洗浄/除去された。 だから私はColorMatrixFilterとセットアップマトリックスを使い、アルファ値を描画可能に別々に設定しなければなりませんでした。

関連する問題