libpngを使用してpng(RGBA)をjpeg(RGB)に変換し、pngファイルをデコードし、png_set_strip_alphaを適用してアルファチャネルを無視しました。しかし、変換後、出力画像には多くのスポットがあります。その理由は、元の画像にアルファが0の領域があり、RGB値に関係なくピクセルが非表示になっているためだと思います。そして、alphaを削除すると(つまり、alpha = 1に設定)、ピクセルが表示されます。したがって、png_set_strip_alphaを使用するだけでは適切な解決策ではないと思います。自分でメソッドを作成する必要がありますか、それともlibpngでこれを実現する方法はすでにありますか?
質問する
782 次
1 に答える
3
そのための方法はありません。アルファチャネルをドロップすると、libpngは生のRGBチャネルを提供し、これにより、以前は表示されていなかった色が「明らかに」なります。
RGBA画像をロードし、自分でRGBに変換する必要があります。最も簡単な方法は、RGB値にアルファを掛けることです。
これにより、RGBAビットマップがインプレースRGBに変換されます。
for(int i=0; i < width*height; i++) {
int r = bitmap[i*4+0],
g = bitmap[i*4+1],
b = bitmap[i*4+2],
a = bitmap[i*4+3];
bitmap[i*3+0] = r * a / 255;
bitmap[i*3+1] = g * a / 255;
bitmap[i*3+2] = b * a / 255;
}
于 2013-08-28T18:22:46.837 に答える