• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:基本的な質問です。)

SetDIBitsToDevice関数でのパレット指定に関する質問

このQ&Aのポイント
  • SetDIBitsToDevice関数において、パレットはlpbmiに指定します。
  • lpbmiのサイズは40+4バイトであり、パレットデータ用には1個(4バイト)しか用意されていません。
  • パレットデータが256個ある場合には他の255個入れる場所がありません。

質問者が選んだベストアンサー

  • ベストアンサー
noname#5537
noname#5537
回答No.1

パレットは BITMAPINFOHEADER に続けて配置しますが, パレットのサイズはビットマップの種類(色数)によって違うので, それにあわせてメモリを確保してやる必要があります。 例えば256色なら, BITMAPINFO *bmpi = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256); こうしておけば, bmpi->bmiColors[0] から bmpi->bmiColors[255] まで使えますよね。

keyguy
質問者

お礼

ありがとうございます。 難しいこと考えずにパレットデータをインフォヘッダに続けて入れることができるバッファを用意して入れておけばいいということですね? インフォ構造体がいびつな形で定義されているのはパレット長が定まらないので苦肉の策なのですね?

関連するQ&A