C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: HBITMAP のカラーパレットの取得方法について


(過去ログ 72 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■41867 / inTopicNo.1)  HBITMAP のカラーパレットの取得方法について
  
□投稿者/ 雲 (1回)-(2009/10/01(Thu) 21:02:23)

分類:[Windows 全般] 

Win32APIのCreateDIBSection を利用して DIB, DDB を作成しているのですが、BITMAPINFO で 8bit を指定して、bmiColors にパレットを指定することでインデックスカラーを使ったHBITMAPを取得できます。また、BitBlt を使うと表示することも簡単です。ここまでは、難しくなかったのですが、さて、パレットを変更してみようとして、はたと困ってしまいました。GetObject を使って取得できる DIBSECTION の中にはパレットが含まれていないため、ほかの方法でパレットを取得しようとしてみたのですが、なかなか、やり方がわかりません。とあるホームページで、GetDIBits を使うと良い。と書いてあったのですが、残念ながら、BITMAPINFO の値を取得できませんでした。何故だろう。。。あと、SetDIBits を使うとパレットを変更できるのかと思って試してみましたが、こちらもダメみたいでした。下記に、コードを記述しておきますので、どこか、誤解しているところなんかありましたら、ヒントをいただけると助かります。よろしくお願いします。

void *pixcel;
BITMAPINFO info = { 0 };
HBITMAP hbmp = CreateDIBSection( 0, &info, DIB_RGB_COLORS, &pixcel, 0, 0 );

BITMAPINFO bbb = { 0 };
GetDIBits( 0, hbmp, 0, 0, 0, &bbb, DIB_RGB_COLORS );


引用返信 編集キー/
■41869 / inTopicNo.2)  Re[1]: HBITMAP のカラーパレットの取得方法について
□投稿者/ Hongliang (473回)-(2009/10/01(Thu) 21:37:07)
DIB ならば、GetDIBColorTable および SetDIBColorTable という関数が用意されてますが。
引用返信 編集キー/
■41870 / inTopicNo.3)  Re[2]: HBITMAP のカラーパレットの取得方法について
□投稿者/ 雲 (2回)-(2009/10/01(Thu) 22:16:38)
No41869 (Hongliang さん) に返信
> DIB ならば、GetDIBColorTable および SetDIBColorTable という関数が用意されてますが。

ありがとうございます。

無事に、

HDC mdc = ::GetDC( 0 );
HDC hdcMem = CreateCompatibleDC(mdc);

::SelectObject( hdcMem, (HGDIOBJ)hbmp_.ToPointer() );

RGBQUAD pix[256] = { 0 };
int c = ::GetDIBColorTable( hdcMem, 0, 256, pix );

として、パレットを取得することに成功しました。ただ、何故、CreateCompatibleDC が必要なのかがよくわからないので、もう少し、調べてみます。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -