3

GDIPlus ブレンド関数は、効率を高めるためにアルファ ビットマップで事前に乗算された RGB チャネルを使用します。ただし、アルファによる事前乗算は、各ピクセルを 1 つずつ処理する必要があるため、非常にコストがかかります。

SSEの組み立ての有力候補になりそうです。その実装を共有したい人がここにいますか? これが大変な作業であることを知っているので、それが私が尋ねる理由です。あなたの作品を盗もうとしているわけではありません。可能であれば、これを共有するためのすべての考慮事項を取得します。

編集:ソフトウェアでアルファブレンディングをしようとしているわけではありません。画像内の各ピクセルの各色成分をアルファで事前に乗算しようとしています。アルファ ブレンドは次の式で行われるため、これを行っています: dst=src src.alpha+dst (1-dst.alpha) ただし、AlphaBlend Win32 関数は dst=src+dst(1-dst.alpha) を実装します。最適化の理由。正しい結果を得るには、AlphaBlend を呼び出す前に src を src*src.alpha と等しくする必要があります。

私はアセンブリについてほとんど知らないので、書くのに少し時間がかかるので、誰かがその実装を共有したいかどうか尋ねていました. ソフトウェアによるアルファブレンディングのゲインは300%であるため、SSEは素晴らしいでしょう。

4

3 に答える 3

2

ここに良い記事が見つかりました。少し古いですが、MMX を使用してアルファブレンディングを実装するセクションで何か役立つことがわかるかもしれません。これを SSE 命令に簡単に変換して、より大きなレジスタ サイズ (128 ビット) を活用できます。

MMX 拡張アルファ ブレンディング

インテル アプリケーション ノートはこちら、ソース コード付き

MMX™ 命令を使用してアルファ ブレンディングを実装する

于 2009-04-17T09:58:34.547 に答える
0

ネイティブの Win32 GDI API を使用すると、各ピクセルの処理に費用がかかりません。
MSDN を参照

于 2009-04-17T17:34:18.710 に答える