問題タブ [premultiplied-alpha]
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.
opengl - アルファチャネルを無視して、OpenGLでテクスチャを描画します
さまざまなアルファ値を持つRGBA形式のテクスチャをメモリにロードしています。
画像は次のように読み込まれます。
画像のアルファチャネルがすべて1として扱われ、テクスチャがRGB画像のように描画されるように、このテクスチャを描画する方法を知りたいです。
ベースイメージを考えてみましょう。

この画像は0から255アルファへの進行であり、全体で255,0,0のRGB値を持っています
ただし、ブレンディングを無効にして描画すると、次のような画像が表示されます:www.ldeo.columbia.edu/~jcoplan/alpha/no_alpha.png
私が本当に欲しいのは次のような画像です:www.ldeo.columbia.edu/~jcoplan/alpha/correct.png
アルファチャンネルを完全に無視するようにいくつかのポインタを本当に感謝します。他のポイントでアルファチャネルが必要なため、最初は画像をRGBとしてロードすることはできないことに注意してください。
編集:私はGL_COMBINEを使用して問題を解決しようとしました:
しかし、それでも運がないので、それでも黒から赤になります。
graphics - 手動の「オーバーレイ」ブレンド操作でアルファを処理する方法は?
私はいくつかの手動 (ウォーク ザ ピクセル) 画像処理で遊んでおり、標準の「オーバーレイ」ブレンドを再作成しています。ここで「Photoshop math」マクロを見ています。
http://www.nathanm.com/photoshop-blending-math/ (オーバーレイの読みやすいバージョンについては、こちらも参照してください)
どちらのソース イメージも、宛先と同様に、かなり標準的な RGBA (各 8 ビット) 形式です。両方のイメージが完全に不透明 (アルファが 1.0) の場合、結果は期待どおりに正しくブレンドされます。
しかし、私の「ブレンド」レイヤー(上の画像)に透明度がある場合、そのアルファをブレンド方程式に正しく組み込む方法について少し混乱しています。ブレンドレイヤーの透明ピクセルが結果に影響を与えないように、ブレンドレイヤーの不透明ピクセルが通常どおりオーバーレイブレンドを行い、半透明のブレンドレイヤーピクセルが結果に何らかのスケーリング効果を持つように動作することを期待しています。
誰かがブレンド方程式またはこれを行う背後にある概念を説明できますか?
結果の画像が正しく事前乗算されたアルファを持つように私がそれを行うのを手伝ってくれればボーナスポイントです(これは両方のレイヤーで不透明でないピクセルに対してのみ作用すると思います。)
ありがとう!
image-processing - アルファブリードの問題を解決するために画像畳み込み中に事前乗算を使用する方法は?
透明な画像にボックス ブラーを適用しようとしていますが、エッジの周りに「暗いハロー」が表示されます。
Jerry Huxtableはこの問題について簡単に言及しており、問題が発生したことを示す非常に優れたデモがあります。

しかし、私の人生では、「事前に乗算されたアルファ」がどのように問題を解決できるかを理解できません。次に、非常に単純な例を示します。私は 1 つの赤と 1 つの緑のピクセルを含む 3x3 の画像を持っています。

実際には、残りのピクセルは透明です。

次に、画像に 3x3 ボックス ブラーを適用します。簡単にするために、中央のピクセルの新しい値のみを計算します。ボックス ブラーが機能する方法は、9 位置の正方形 (カーネルと呼ばれる 3x3) があるため、カーネル内の各ピクセルの 1/9 を取得し、それを合計することです。

そう
この非常に単純化された例では、計算は非常に単純になります。
これにより、次の最終的な色の値が得られます。

この色は暗すぎる。Photoshop で同じ 3x3 ピクセルの画像に対して 3px ボックス ブラーを実行すると、次のような結果が得られます。

白の上に表示すると、どちらがより明確になります:

実際には、透明なテキストを含むビットマップでボックスぼかしを実行しています。テキストは、フリンジの周りが暗くなっています。

私はPixelFormat32bppARGBフォーマットされているGDI +ビットマップから始めています
3x3 畳み込みカーネルを適用するときに「事前に乗算されたアルファ」を使用するにはどうすればよいですか?
次の理由から、回答には新しいフォーラムを含める必要があります。
間違った答えを得ています。
編集:より簡単な例は次のとおりです。
0..1 の範囲の色とアルファ値でこの計算を実行します。

ボックス ブラー畳み込みフィルターを中央のピクセルに適用します。
これにより、かなり透明な濃い緑色が得られます。

これは私が期待するものではありません。比較すると、Photoshop の Box Blur は次のようになります。

事前に乗算されたアルファであると想定(0, 0.33, 0, 0.33)し、乗算を解除すると、次のようになります。

これは、私の完全に不透明な例に適しています。しかし、部分的に透明なピクセルを使用し始めたときにどうすればよいかわかりません。
こちらもご覧ください
png - PNG を乗算済みアルファに変換する方法
1 つまたは複数の標準 PNG をあらかじめ乗算されたアルファに変換できるWindows用の単純なツールまたはプロセスを探しています。
コマンド ライン ツールは理想的です。私は PIL (Python Imaging Library) と Imagemagick に簡単にアクセスできますが、作業が楽になる場合は別のツールをインストールします。
ありがとう!
video - FLV 事前に乗算されたアルファ チャネル - web ページに swf として追加しますか?
私は事前に乗算されたアルファ チャネルを初めて使用し、使用できるアプリケーションは Adobe Flash だけです。事前に乗算されたアルファ チャネルを持つこの FLV ムービー ファイルがあり、それを Web ページに挿入してアニメーションとして再生したいと考えています。フラッシュと、それを透明に見せる方法について少し迷っているところです
ビデオは反転しているように見えるので、背景は黒でアニメーションは白なので、そのように公開しようとすると、同じままで正しく見えません。誰かが私を正しい方向に向けてもらえますか?
image-processing - PNG を乗算済みアルファから従来のアルファ透明度に変換しますか?
ほとんどのツールがアルファを正しくサポートしていないため、事前に乗算されたアルファを持つ PNG 形式のソース画像を扱うのに非常に苦労しています。
より従来の PNG への「最良の推測」変換を実行できるものはありますか?
php - PHP での imagecopyresampled - 事前に乗算されたアルファの問題
アルファ値を使用するバッファの imagecopyresampled に問題があります。どうやら、アルゴリズムはフィルタリングの前にピクセルのアルファ値を事前に乗算します。これにより、オブジェクトの周りに黒い境界線が生じます。
再現する手順:
RGB部分が完全に白で、アルファ部分の黒い背景に(アンチエイリアス処理された!!)白い円(正方形ではなく円を使用してください!)を持つ画像を撮ります(したがって、アルファ部分はほとんど完全に白と完全に黒のピクセル、およびアンチエイリアシングによる円の境界上のいくつかのグラデーション ピクセル - これは、入力画像が事前に乗算されていないことを意味します - 画像の RGB 部分が完全に白であるため、ストレート/マット化されていません)。
imagecopyresampled を使用して画像を半分に縮小します
完全に白い画像の上に結果を構成する
私が期待するもの:完全に白い画像
私が得るもの:円の輪郭の周りの灰色がかった境界線
これは、スケールダウン アルゴリズム内で事前に乗算されたアルファが原因であると確信しています (アルゴリズムは、新しい RGB 値を計算するために、ピクセルのアルファ値とその RGB 値を乗算します。したがって、白いピクセルはグレーになります)。
誰かがこれの回避策を知っていますか?
alphablending - 事前に乗算されたアルファを使用したパーティクルブレンドの問題
3Dレンダリングシーンからテクスチャを保存して、再利用しようとしていました。
大きな問題は、rgb値がそのアルファ値と一致しないことです。黒のエッジのない画像が必要なので、そのアルファ値を分割するためにrgbカラーを使用する必要があります(Photoshopなどの画像操作ソフトウェアは、アルファチャネルが事前に乗算されていない画像を処理できます。)
残念ながら、色が薄すぎるため、一部の結果値が1にカットオフされます。
そこで、事前乗算アルファと呼ばれる手法に目を向けました(詳細を参照)。シェーダーを使用する代わりに、個別のアルファ計算を使用します。
例:RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.InverseSourceAlpha;
次に、renderstateを追加します。RenderState.SourceBlendAlpha = Blend.One; RenderState.DestinationBlendAlpha = Blend.InverseSourceAlpha;
それはうまくいきますが、私が次RenderState.SourceBlend = Blend.SourceAlpha;
RenderState.DestinationBlend = Blend.One;
RenderState.SourceBlendAlpha = Blend.One;
RenderState.DestinationBlendAlpha = Blend.One;
のことを処理しようとすると、結果は完全に間違っています、誰かが理由を教えてもらえますか?
PS:理由がわかりました。事前に乗算されていないブレンド状態(SourceAlphaとinverseSourceAlpha)を使用すると、rgba値は確実に0〜1以内に制御されますが、加算状態(SourceAlphaと1)に切り替えると、rgb値は1を超えると、誤った値が発生します。
今私の問題は、アルファ値を制御して、すべての詳細を保持し、同時にオーバーフローしないようにする方法です。
opengl - GLSL パーティクルのレンダリング (premult)
シェーダーで動作するパーティクル レンダリング ライブラリを取得しようとしています。それは固定機能で完璧に機能し、私が目指している結果を知っています. 最終的なブレンディングビットをどのように行うかがわかりません。
このようなパーティクル ライフを DWORD にパックし、dword を頂点属性の 1 つとして設定します。クワッドには、このような 4 つの頂点があります。3 つの float 位置、3 つの float 法線、4 バイトの拡散、2 つの float uv。4byte 属性はどうすればよいですか? glsl シェーダーで vec4 または float 属性として使用しますか? また、このライブラリは事前に乗算されたアルファを使用するため、どのようなブレンド方程式を使用すればよいですか? ライブラリはパイロ粒子ライブラリです。