トップページ > 記事閲覧
グラフィックハンドラのαチャンネル有無の確認方法
名前:たいき 日時: 2019/06/06 17:27

RGB888とRGBA8888のPNGファイルを読み込んで描画したいと考えております。 そちらにあたり、下記のような処理を組みたいのですがLoadGraph関数で読み込んだグラフィックハンドラからアルファ値の有無を確認する術はございますでしょうか。 void Draw(int x, int y, int handle) { int useAlpha = (hanleがαチャンネルを持っているか) ? TRUE : FALSE; DrawGraph(x, y, handle, useAlpha); } int main() { if (!DxLib_Init()) return -1; int handle = LoadGraph("rgb888.png"); Draw(100, 100, handle); DeleteGraph(handle) handle = LoadGraph("rgba8888.png"); Draw(200, 200, handle); DeleteGraph(handle) DxLib_End(); return 0; } ご教示頂けますと幸いです。 よろしくお願いします。
メンテ

Page: 1 |

Re: グラフィックハンドラのαチャンネル有無の確認方法 ( No.1 )
名前:管理人 日時:2019/06/07 00:25

グラフィックハンドルにアルファ値が含まれているかどうかを確認する手段はありません DrawGraph の第4引数を TRUE にしても RGB888 の画像に透過色のピクセルが無ければ 第4引数を FALSE を渡した場合と同じ結果になりますので、DrawGraph の第4引数は 常に TRUE にしてしまって良いと思います もし『画像中の透過させたい個所は RGBA8888 の画像を使うので、透過色機能は不要』との ことでしたら、LoadGraph を実行する前に SetUseTransColor( FALSE ) ; を実行して透過色機能を無効にしてください m(_ _)m
メンテ
Re: グラフィックハンドラのαチャンネル有無の確認方法 ( No.2 )
名前:たいき 日時:2019/06/07 00:47

> SetUseTransColor( FALSE ) ; ご回答有り難うございます。 こちら試してみます。 > DrawGraph の第4引数を TRUE にしても RGB888 の画像に透過色のピクセルが無ければ > 第4引数を FALSE を渡した場合と同じ結果になりますので、DrawGraph の第4引数は > 常に TRUE にしてしまって良いと思います IHDRチャンクが0x11バイト目のカラータイプが2のPNG画像を使用しているのですが黒色(RGB=0x000000)が透過されているものが幾つかありました。 もし差し支えなければ「透過色のピクセルが無い」というのをどのように判断しているのかご教示頂けますと幸いです。
メンテ
Re: グラフィックハンドラのαチャンネル有無の確認方法 ( No.3 )
名前:管理人 日時:2019/06/08 18:44

> IHDRチャンクが0x11バイト目のカラータイプが2のPNG画像を使用しているのですが黒色(RGB=0x000000)が透過されているものが幾つかありました。 > もし差し支えなければ「透過色のピクセルが無い」というのをどのように判断しているのかご教示頂けますと幸いです。 それは SetUseTransColor( FALSE ) ; を実行して透過色を無効にされた状態で LoadGraph で読み込んだ画像についてでしょうか? もし SetUseTransColor( FALSE ) ; を実行していない状態でしたら、デフォルトの 透過色は真っ黒( RGB=0x000000 )となっていますので、RGBのみの画像でも、真っ黒の 部分は透過色として DrawGraph の第4引数を TRUE にした場合は透過されます
メンテ
Re: グラフィックハンドラのαチャンネル有無の確認方法 ( No.4 )
名前:たいき(解決済み) 日時:2019/06/08 23:19

> それは > > SetUseTransColor( FALSE ) ; > > を実行して透過色を無効にされた状態で LoadGraph で読み込んだ画像についてでしょうか? こちらは、  SetUseTransColor( TRUE ) ; の状態の質問でした。 紛らわしい書き方をしてしまい申し訳ございません。 質問を読み返してみて私が色々勘違いしていたようです。 > 透過色のピクセルが無ければ という部分を何か特殊なチャンクデータが含まれている場合と勝手に思っておりました。 よくよく読むと「抜き色が画像上で使われていなければ抜けない」という意味でした。 納得しました、トンチンカンな質問してすみませんでした。 ----- また、教示いただきました下記処理を呼ぶことで意図した表示をすることができました。   SetUseTransColor( FALSE ) ; ありがとうございます。 ----- 以上で、今回の件は解決しました。 ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存