アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++でOpenCVを使って画像処理を研究中です。
OpenCVでの画像の表示は、


char *filename = "lena.jpg";
image = cvLoadImage(filename, CV_LOAD_IMAGE_COLOR);
cvNamedWindow ("lena", CV_WINDOW_AUTOSIZE);
cvShowImage ("lena",image);

で出来るということは分かりました。
しかし、MFCで作ったフォームのピクチャーボックスへの表示の仕方が分かりません。
画像処理は実行ボタンでpictureBox1の元の画像をpictureBox2に表示させようと考えております。

回答のほど、どうぞよろしくお願いいたします。
また、分かりやすいサイトなどありましたらお願いします。

A 回答 (1件)

MFCのピクチャーボックスはStaticコントロールですので Bitmap(またはCBitmap)なら表示可能です



そのダイアログクラスに CBitmap型の変数を準備します

img = cvLoadImage( filename, 1 );
// ビットマップ用のカラーバッファ
char* ColorBuf = (char*)calloc( sizeof(char), img->widhth * img->Height * 4 );
for( int y = 0; y < img->height; y++ ) {
  for( int x = 0; x < img->width; x++ ) {
    // Blue
    ColorBuf[ y * img->width + x * 4 + 0 ] =
      img->imageData[ y * img->widthStep + x * 3 + 0 ];
    // Green
    ColorBuf[ y * img->width + x * 4 + 1 ] =
      img->imageData[ y * img->widthStep + x * 3 + 1 ];
    // Red
    ColorBuf[ y * img->width + x * 4 + 2 ] =
      img->imageData[ y * img->widthStep + x * 3 + 2 ];
  }
}
m_bmp.CreateBitmap( img->width, img->height, 1, 32, ColorBuf );
free( ColorBuf );

((CStatic*)GetDlgItem( IDC_IMGSRC ))->SetBitmap ( m_bmp );
cvReleaseImage( &img );
といった具合でしょう

ダイアログに貼り付けたピクチャーコントロールはプロパティの設定でBitmapにしておきましょう
またリソースIDも『IDC_STATIC』以外のものに変更することをお忘れなく
上記の例では IDC_IMGSRC だと仮定しています

この回答への補足

早速の回答ありがとうございます。
処理後の画像を表示するころができました。
しかし、バグったように表示されてしまいます。
ピクチャーボックスの上の方に、画像が4つ並んで表示されています。

何か改善すべきところはあるでしょうか?
よろしくお願いいたします。

補足日時:2008/10/21 16:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!