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);」にしようと思います。
大変勉強になりました。ありがとうございました。
|