0

低レベルのプログラマーの助けをいただければ幸いです... 私の問題は次のとおりです。ARGB8888 形式のビットマップを直接ビデオ メモリに出力したいと考えています。ビットマップの形式は問題ありません。問題は、使用方法がわからないアルファ チャネルです。ウィキペディアで、次のようにピクセルをオーバーレイするコードを見てきました。

CompositedPixelColor = Alpha * ForegroundPixelColor + (1 - Alpha) * BackgroundPixelColor

ここで、色は 0 から 1 まで変化します。これは各チャネル RG B に対して行われます。私が行っているのは、上記の式を使用して、ビットマップの各ピクセルの各色の各バイトをビデオ メモリに直接コピーすることですが、色がうまく表示されないため、何かが欠けています。

このスレッドに投稿されたコードのようなことをしようとしています: http://www.badadev.com/create-a-photo-editing-app/ しかし、ここでは透過性を扱っていません。それが私の問題です。ありがとう!

4

1 に答える 1

0

投稿したコードでは、アルファは 0 から 1 の間の値として扱われます。もちろん、アルファ チャネルを unsigned char として使用する場合は機能しません。整数空間で実行する場合は、次を使用します。

unsigned short background = 0x40;
unsigned short foreground = 0xe0;
unsigned short alpha = 0xc0;
unsigned short compositedcolor = (alpha * foreground + (0xff - alpha) * background) >> 8;

これらは short ですが、値はすべて 0 ~ 255 である必要があります。short は char * char 製品の計算スペースとして必要なだけであり、中間キャストを使用することもできますが、すべてに unsigned short 型を使用してより多くの値を作成しました。読み取り可能。

于 2011-01-11T11:53:04.837 に答える