問題タブ [porter-duff]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#でのピクセルごとの高速ブレンド効果「乗算」(Androidの場合)
私は、ビットマップでブレンド効果を「乗算」するためのより高速な方法を探していました。使用してみPorterDuff.Multiply
ましたが、アルファチャネルを含むビットマップでは目的の結果が得られず、アルファが0の場合は黒になります。
読んだことがありますが、私が求めている効果(photoshop / gimpの「乗算」レイヤーブレンディング)を実現する唯一の方法は、ピクセルごとに効果を適用することです。
OpenGLはアプリのオプションではありません。
ウィキペディアが提案するブレンドモードのアルゴリズムを正しく理解しているかどうかはわかりません。
TopColour * BottomColour / 255
だろう:
を変換Color.ToArgb
して整数で作業する方が速いでしょうか?そして最後に、乗算効果を正しく計算していますか?正しく表示されません:(
私は立ち往生しています、どんな助けでも大歓迎です。
ありがとうございました。
android - AndroidでさまざまなPorterDuffモードを実装する
2つの画像をマージする必要がある画像編集ツールに取り組んでいます。gimpのようなほとんどの画像編集ツールは、画像のマージまたはブレンドにPorterDuffモードを使用します。私もアンドロイドで同じアプローチを使用しています。
androidが提供するPorterDuffモードの数が限られているため、目的の結果を得ることができません。そこで、Androidに含まれていないPorterDuffモード(オーバーラップ、ハードライト、ソフトライト、カラーバーン、カラーダッジ)の実装を考えています。
問題は、どこから始めればよいかわからないことです。したがって、この点に関する参考資料やガイダンスは高く評価されます。
android - paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));を使用できません。アンドロイドで
画像に反射効果を加えていますが、この線は使用できません
「DST_IN」という赤い線があり、解決できないか、フィールドではないことを示しています。私以外の人はどうやってそれを使うことができますか?その行を使用するプラグインなどはありますか?検索してみましたが、使い方がわかりません。
どんな考えでも高く評価されます。
android - ビューでハードウェアアクセラレーションを有効にして、長方形のオーバーレイに穴を開けます
基本的な描画を行うビューがあります。この後、前の描画の領域のみが表示されるように、穴を開けた長方形を描画します。そして、最高のパフォーマンスを得るために、ハードウェアアクセラレーションを有効にしてこれを実行したいと思います。
現在、2つの方法がありますが、ハードウェアアクセラレーションを無効にし、もう1つが遅すぎる場合にのみ機能します。
方法1:SWアクセラレーション(低速)
このモードでは「canvas.clipPath」がサポートされていないため、これはビューに対してハードウェアアクセラレーションが有効になっている場合は機能しません(SWレンダリングを強制できることはわかっていますが、それを避けたいと思います)。
方法2:ハードウェアアクセラレーション(V.低速)
消しゴムが作成される場所
これは明らかに遅いです-Bitmap
ビューの新しいサイズは、描画呼び出しごとに作成されます。
方法3:ハードウェアアクセラレーション(高速、一部のデバイスでは機能しない)
ハードウェアアクセラレーションと互換性のある方法と同じですが、追加のキャンバスは必要ありません。これには大きな問題があります-強制的にSWレンダリングで動作しますが、HTC One X(Android 4.0.4-およびおそらく他のいくつかのデバイス)では、少なくともHWレンダリングを有効にすると、円が完全に黒くなります。これはおそらく22361に関連しています。
方法4:ハードウェアアクセラレーション(許容可能、すべてのデバイスで機能)
メソッド2を改善するためのJanの提案に従って、私はへの呼び出しごとにビットマップを作成することを避けonDraw
、代わりにonSizeChanged
:で作成しました。
そして、これらを次のように使用しましたonDraw
:
パフォーマンスは方法3ほど良くはありませんが、2よりはるかに優れており、1よりわずかに優れています。
質問
同じ効果を実現するにはどうすればよいですか?ただし、ハードウェアアクセラレーションと互換性のある方法で実現できます(デバイスで一貫して機能します)。SWレンダリングのパフォーマンスを向上させる方法も受け入れられます。
注意:円を移動するときは、キャンバス全体ではなく、領域を無効にしているだけなので、パフォーマンスを向上させる余地はありません。
java - PorterDuffXfermode DST_IN が期待どおりに機能しない
そのため、現在行っている描画 (アルファ透明度を使用して円弧の一部を描画) を高速化しようとしており、円弧全体を別のビットマップにキャッシュし、アルファ マスクで選択的に表示しようとしていました。
私が行った調査 (Android 用の Xfermodes API デモ、この例、およびこのツール) から、たとえば次の 2 つのグラフィックがある場合:
次を使用して描画します。
この結果が得られるはずです:
宛先イメージ (円) が、ソース イメージ (円弧) が描画される領域にクリップされる場所。代わりに、完全な円を取得します。円弧を描くだけでは正しい位置に表示され、代わりに DST_OUT を使用すると、期待される結果 (円の他の 3 つの象限) の逆になります。
また、この Xfermode で問題が発生した場合に備えて、このビューのハードウェア レンダリングを無効にしましたが、違いはありません。
最も単純なレベルで別のプロジェクトに分割して動作させようとしましたが、次のコードを使用しても同じ問題が発生します。
私はそれを間違って使用していますか?何か足りないだけですか?バグを見つけましたか?:)
android - Android-Porterduff.Mode.ScreenでColorFilterがアルファをブレンドしないようにするにはどうすればよいですか?
GridViewにいくつかの画像をロードしましたが、画面モードのブレンドを使用してそれらに赤みを帯びた色を適用したいと思います。
私のアダプターには次のコードがあります:
私も試しました
しかし、私はいつも次のようなものになってしまいます:
を使用するMode.Multiply
と、透明な背景は着色されませんが、結果は暗すぎます。Mode.Screen
透明部分を使用して着色しないことは可能ですか?
作成する必要がありColorMatrix
ますか?誰かが私を正しい方向に向けることができますか?
android - Android - ビットマップ テクスチャを API 描画ルーチンに適用する
キャンバスに描画する必要がある Path オブジェクトのテクスチャとして機能する画面全体にまたがるビットマップがあります。次に、このテクスチャ パスを上に描画する必要がある背景画像があります。
PorterDuff モードを使用してみましたが、何も正しく動作していないようです。PorterDuff モードがどのように動作するかを正確に理解するのに苦労していました。
このテスト コードを使用して、パスをテクスチャ化する方法を見つけました。
しかし、それを背景画像の上に配置する方法がわかりません。PorterDuff モードを間違って使用しているだけですか?
android - ColorFilterで描画可能なNinepatch
カレンダービューを作成しています。やりたいのは、ClickabeであるLineairLayoutの背景を作成することです。
したがって、2つの画像を使用してStateListDrawableを作成します。
- 背景の画像
- アイテムが押されたときの画像
これまでのところ、これはこのコードで機能します。
しかし、私は何か特別なことをしたいと思います。ユーザーが背景を表示するために使用したい色を渡すことができるようにしたいと思います。したがって、背景変数は可変である必要がありますが、9パッチのドローアブルに基づいている必要があります。
だから私はこのようなことをすることができると思いました:
Color.REDは、ユーザーが選択した色に置き換える必要があります。
しかし、それはうまくいかないようです。9パッチは完全に作成されますが、カラーフィルターは適用されません。
他のPoterDuff.Modeも試しました。
- SRC
- SRC_ATOP
- DST_IN
- ..。
私が間違っていること、または私の問題を解決するために他に何ができるかについての手がかりがあれば、私に知らせてください!:-)
Kr、
ダーク
android - レイヤーリストで XferMode を定義することは可能ですか?
レイヤー リスト XML ファイルで複数のレイヤーを指定し、PorterDUff の特定の XferMode に従って各レイヤーをブレンドするように指示する方法があるかどうか、私は迷っていました。
複合背景を生成すると非常に便利です。
android - Android での画像間のクロスフェード
私は現在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 操作では色が飽和してしまいますが、これも望ましくありません。