質問

ここに私のジレンマです:マスターイメージ(最初)とサブタイトルトラック(秒)、と私は第二の画像のアルファチャンネルに基づく方法でそれらをオーバーレイしたい:私はRGBA RAW画像にしている場合それの0xFFでは、最初の画像からピクセルを取るならば、そうでない場合は最初のものの上に第2の画像のオーバーレイを作成し、第2の画像からの画素を取り、ゼロです。ここではこのために使用されるコードは次のとおりです。

if(frame->bytes[pc + 3] == 0xFF) /* this is NO transparency in the overlay image, meaning: take over the overlay 100% */
{
    pFrameRGB->data[0][pc] = frame->bytes[pc];    // Red
    pFrameRGB->data[0][pc+1] = frame->bytes[pc+1];// Green 
    pFrameRGB->data[0][pc+2] = frame->bytes[pc+2];// Blue 
}
else
if(frame->bytes[pc + 3] != 0) /* this is full transparency in the overlay image, meaning: take over the image 100% */
{
    pFrameRGB->data[0][pc] |= frame->bytes[pc];    // Red
    pFrameRGB->data[0][pc+1] |= frame->bytes[pc+1];// Green 
    pFrameRGB->data[0][pc+2] |= frame->bytes[pc+2];// Blue
    pFrameRGB->data[0][pc+3] = frame->bytes[pc+3]; // Alpha 
}
pFrameRGB上記のコードでは、すでにフレーム - >バイトが「オーバーレイ/字幕」の画像である...そして、ここに私の質問に来て、そこにSOMET画像を含む、対象のRGBAの画像です:いくつかのカラフルなオーバーレイ/字幕画像に増加アルファと私は赤/緑のオーバーレイイメージを持っていると私は希望:それは字幕画像は、私が取得したい効果にオーバーレイされていないようだが、あなたは例えば(色の範囲全体を見ることができるように先が...あまりにもカラフルであります)しかし、私は下の画像上のカラフルなピクセルの多くを得る上記のアプローチと、その下の画像と赤/緑のオーバーレイを「淡」のように見えるように、オーバーレイ画像のように。あなたはこれに幾分良好なアプローチを持っていますか?

おかげで、 fritzone

役に立ちましたか?

解決

アルファブレンディングを行うための方程式は、単なるビット単位よりも複雑ですか。 RGBのための線形応答モデルを仮定すると、非常に一般的な実装があります:

dst_R = (src_R*src_A + dst_R*(255 - src_A)) / 255;
dst_G = (src_G*src_A + dst_G*(255 - src_A)) / 255;
dst_B = (src_B*src_A + dst_B*(255 - src_A)) / 255;
dst_A = min(src_A + dst_A, 255);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top