27

RGBA 画像 (前景画像) から RGB 画像 (背景画像) へのアルファ ブレンド操作を実行しようとしています。ただし、そうしているうちに、間違ったアルファブレンディング操作を行っているか、間違っている可能性があると思います。たとえば、私の RGB 画像のピクセルは (127, 127, 127) の灰色がかった色です。ピクセルの RGBA 画像のピクセルは (0, 0, 255) になります。ブレンド操作を行った後、最終的な色は (127, 0, 255) になります。しかし、それは加法ブレンドであり、私が行っている操作とは異なると思いました.

私の価値観がどのように設定されているかについては、これを見てください

incPixelColor[0] = 0; (red)
incPixelColor[1] = 0; (green)
incPixelColor[2] = 255; (blue)
incPixelColor[3] = 255; (alpha)

currentPixelColor[0] = 127; (red)
currentPixelColor[1] = 127; (green)
currentPixelColor[2] = 127; (blue)

私の計算がどのように設定されているかについては、これを見てください

float incAlpha = (currentPixelColor[3]/255.0f);

float red = ((float)incPixelColor[0]/255.0f * incAlpha) + ((float)currentPixelColor[0]/255.0f);
float green = ((float)incPixelColor[1]/255.0f * incAlpha) + ((float)currentPixelColor[1]/255.0f);
float blue = ((float)incPixelColor[2]/255.0f * incAlpha) + ((float)currentPixelColor[2]/255.0f);


currentPixelColor[0] = min(red * 255, 255.0f);
currentPixelColor[1] = min(green * 255, 255.0f);
currentPixelColor[2] = min(blue * 255, 255.0f);

アルファのないピクセルの場合、値を (0, 0, 255) にしてから、アルファのある画像の場合はブレンドしたいと思います。上記の操作の最後には、(127, 127 、255)。すべてのピクセルにアルファがあるかどうかを確認する必要があります。そうであれば、ブレンドを行うか、これを行う別の方法がありますか?

4

2 に答える 2

32

典型的な「オーバー」ブレンドは、次の方法で行われます。

outputRed = (foregroundRed * foregroundAlpha) + (backgroundRed * (1.0 - foregroundAlpha));

そして、青と緑のチャンネルについて繰り返します。すべてのピクセルに対してこれを行います。

于 2012-01-26T06:48:08.473 に答える
2

背景(currentPixelColor)の(1-Alpha)乗数を逃したようです

于 2012-01-26T12:27:44.917 に答える