質問: 0; } setdibitstodevice(capt->m_hdc, 0, 0, 320, 240, 0, 0, 0, 240, m_pbit, &bmif, dib_rgb_colors); グレースケール画像なので配列bmicolorsは全て同色としました。 また、picturecontrolのtypeをオーナ描画など全てのtypeを試しましたが、表示されませんでした。 必ずpicturecontrolに描画しなければならないという決まりはないのですが、ダイアログボックスにビットマップを表示するにはpicturecontrolだと考え、それに表示するようプログラムを組みました。 画素情報(グレースケールの輝度情報)のみ既知である状態からビットマップをダイアログに表示するためには他に方法があるのでしょうか? 上記のプログラムにおける間違い、またその他の方法についてアドバイスを頂けたらと思います。 よろしくお願いいたします。
回答: リソースエディタでピクチャーコントロールのtypeは変更なさいましたか? ピクチャーコントロールを追加しただけではtypeは『フレーム』になっています この状態では ピクチャーコントロールに対してsetbitmapを行ってもイメージを表示しません typeを『ビットマップ』に変更しましょう プロパティidも『idc_static』以外にしたほうがいいでしょう cbitmapクラスを使うというのも一つの手ですよ ダイアログクラスのメンバーに cbbitmap m_bmpobj などを追加して ピクチャーボックスにセットするときに m_bmpobj.deleteobject(); // orgbmp[320 x 240]にグレースケールのデータがあるとして char* pbuf = (char*)calloc( 320*240, sizeof(rgbquad) ) for ( int y = 0; y < 240; y++ ) { for ( int x = 0; x < 320; x++ ) { pbuf[ y * 1280 * ( x * 4 ) + 0 ] = orgbmp[ y * 320 + x ]; pbuf[ y * 1280 * ( x * 4 ) + 1 ] = orgbmp[ y * 320 + x ]; pbuf[ y * 1280 * ( x * 4 ) + 2 ] = orgbmp[ y * 320 + x ]; pbuf[ y * 1280 * ( x * 4 ) + 3 ] = 0; } } m_bmpobj.createbitmap( 320, 240, 1, 32, pbuf ); // m_ctlpictureはピクチャーボックスのコントロール変数 m_ctlpicture.setbitmap( m_bmpobj ); // または // ((cstatic*)getdlgitem(idc_picture1))->setbitmap( m_bmpobj ); free( pbuf );