掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CImageのAlphaBlendの結果の疑問 (ID:66552)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 結果は黒になると思っていたのですが、これは何故なのでしょうか? CImage::AlphaBlend()の内部で使用しているであろう(2005のソースが無いので予想だが) AlphaBlend()API関数の仕様のような気がする。 AlphaBlend()API関数は、色深度が256以下のケースでは思い切った減色処理をしてからBlendをしている模様。 RGB の要素値が、0-7 は [4]、8-15 は [12]、...という感じに。 数式で示すと、 color.red = (color.red & 0xf8) + 4; color.green = (color.green & 0xf8) + 4; color.blue = (color.blue & 0xf8) + 4; という感じかな。 で、今回の「RGB(0, 0, 0)」の場合だと 1、paletteから RGB(0, 0, 0) の近似色取得 = 「rgb[0](提示ソースから)」 = RGB(0, 0, 0) 2、RGB(0, 0, 0)を上記減色処理で「RGB(4, 4, 4)」に置換。 3、RGB(4, 4, 4) と RGB(4, 4, 4) をblend = 同値のblendなのでalpha値に関わらずRGB(4, 4, 4) 4、palatte内から RGB(4, 4, 4) の近似色を取得 = rgb[4]の色 5、結果Result.bmpは、全部「RGB(4, 4, 4) == rgb[4]」 となる。 まぁ、palette使うような状況でAlphablendなんて無茶言われても…、って事かな。 > ただ、255のときだけRGB(0,0,0)になりました 255の時だけは処理方法が異なるためと思われる。 http://msdn2.microsoft.com/en-us/library/ms532306.aspx ちなみに上記記述内容は公式資料から得たものでは無いので注意。 +調査環境は「OS:WinXP, VC++6.0sp6, PFSDK:Feb/2003」で、環境に依っては結果が異なる可能性有。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.