トップページ > 記事閲覧
SetCreateGraphColorBitDepthの引数
名前:sereparu 日時: 2017/06/18 09:14

SetCreateGraphColorBitDepthの引数についてお聞きします。 過去ログの「カラービット数(色深度)について」という記事において 画像の使用メモリ量は、SetCreateGraphColorBitDepth関数で指定した値に依存する という内容がありました。 現在DXライブラリで制作中のゲームではカラービット数が8bitの画像を使用しています。 そのため「SetCreateGraphColorBitDepth(8);」と設定した方が良いのかと考えました。 しかし、リファレンスではSetCreateGraphColorBitDepthの引数は「16 又は 32」と書いてありました。 これは、引数に8を指定することに問題がある、もしくは意味がないということでしょうか? (試しに引数を8で実行してみましたが、画像の表示やゲームの動作には特に問題は無いようでした) 画像関係のログを見てみましたが、「画面のフォーマットは D3DFMT_X8R8G8B8 です」というような 内容が大量に書かれていて、どこを見れば何が分かるのか、いまいち分かりませんでした。 よろしくお願い致します。
メンテ

Page: 1 |

Re: SetCreateGraphColorBitDepthの引数 ( No.1 )
名前:管理人 日時:2017/06/18 19:41

カラービット数が8bitの画像とは 256色パレットの画像のことでしょうか? もしそうだとしますと、現在のGPUはパレット画像には対応していないので、 パレット画像を使用する場合は多くは X8R8G8B8 や A8R8G8B8 のような 32bitカラーの 画像に変換して使用されます > これは、引数に8を指定することに問題がある、もしくは意味がないということでしょうか? はい、GPU がパレット画像に対応していないので、SetCreateGraphColorBitDepth に 8 を指定して 呼び出した場合は 8 の値は無視されて、16bit または 32bit の画像として扱われます
メンテ
Re: SetCreateGraphColorBitDepthの引数 ( No.2 )
名前:sereparu 日時:2017/06/18 20:44

管理人さん 迅速かつ丁寧なご回答、誠にありがとうございます。 > カラービット数が8bitの画像とは 256色パレットの画像のことでしょうか? はい、標準のペイントソフトで保存した24bitのPNG画像をIrfanViewというソフトで8bit(256色)に変換しています。 IrfanViewは色数を減少させたときに、見た目が崩れないように綺麗に調整してくれるので重宝しているのですが 色数の指定が1bit(2色)、4bit(16色)、8bit(256色)、24bit(1677万色)しかなく、16bitや32bitがありません。 > パレット画像を使用する場合は多くは X8R8G8B8 や A8R8G8B8 のような 32bitカラーの 画像に変換して使用されます 8bit画像を使用すると32bit画像として扱われるのであれば、16bitの画像を使用した方が 使用メモリ量を減らせるということでしょうか? もしくは、8bit画像を使用して「SetCreateGraphColorBitDepth(16);」とすれば 16bit画像を使用するのと同じ使用メモリ量にすることができるのでしょうか? 連続での質問で大変恐縮ですが、ご回答お願い致します。
メンテ
Re: SetCreateGraphColorBitDepthの引数 ( No.3 )
名前:管理人 日時:2017/06/18 21:40

> 色数の指定が1bit(2色)、4bit(16色)、8bit(256色)、24bit(1677万色)しかなく、16bitや32bitがありません。 読み込まれた後に 16bit または 32bit になるだけなので、読み込む前の画像が 8bit であっても問題はありません > 8bit画像を使用すると32bit画像として扱われるのであれば、16bitの画像を使用した方が > 使用メモリ量を減らせるということでしょうか? 最新版のDXライブラリでは DirectX11 が使用できる環境では DirectX11 を使用するのですが、 DirectX11 では 16bitカラーのテクスチャが使用できない場合がほとんどなので、16bit の画像を 使用した場合も SetCreateGraphColorBitDepth(16); を指定した場合も読み込み後は 32bit の 画像として扱われます なので、現在の 8bit画像のまま使用されて問題ないと思います ただ、DxLib_Init を実行する前に SetUseDirect3DVersion( DX_DIRECT3D_9EX ) ; を記述しておくと DirectX11 の代わりに DirectX9 を使用するようになるので、この場合は SetCreateGraphColorBitDepth(16); を使用すると 16bit画像として扱われ、使用メモリの節約ができます ただ、8bitカラーの画像は各256個パレットが R8bit G8bit B8bit の中から色を指定するわけですが 16bit画像は R5bit G6bit B5bit と、各色のビット数が少ないので、パレットが指定した色が 正しく再現できません なので、8bitパレット画像を SetCreateGraphColorBitDepth(16); を実行した状態で読み込み、 DrawGraph で表示すると「画像の色が何か違う…」という状態になると思いますので、 あまりお勧めできません…
メンテ
Re: SetCreateGraphColorBitDepthの引数 ( No.4 )
名前:sereparu(解決) 日時:2017/06/18 22:57

管理人さん 何度も丁寧なご回答、誠にありがとうございます。 8bitと16bitではRGBの各bit数が違うんですね。知りませんでした。 色が変わってしまうことは避けたいので、「SetCreateGraphColorBitDepth(32);」にしようと思います。 大変勉強になりました。ありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存