技術のこととか
// この前の段階でOpenGLレンダリングコンテキストをカレントにしておく cv::Mat cvImg = cv::Mat::zeros(winHeight, winWidth, CV_8UC3); glReadPixels(0, 0, winWidth, winHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, cvImg.data); cv::flip(cvImg , cvImg , 0);
// どこかから cv::Mat cvImg がやってきたとする。 Bitmap^ bmp; IntPtr ip(cvImg.ptr()); // OpenCVの画像バッファをintポインタに変換 if ((pictureBox1->Image == nullptr) || (pictureBox1->Width != cvImg.cols) || (pictureBox1->Height != cvImg.rows)){ //ピクチャボックスをビットマップ画像サイズに合わせる pictureBox1->Width = cvImg.cols; pictureBox1->Height = cvImg.rows; //PictureBoxと同じ大きさのBitmapクラスを作成する。 Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height); //空のBitmapをPictureBoxのImageに指定する。 pictureBox1->Image = bmpPicBox; } Graphics^g = Graphics::FromImage(pictureBox1->Image); // グラフィックオブジェクト作成 bmp = gcnew Bitmap(cvImg.cols, cvImg.rows, cvImg.step, System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip); // bmp->Save("test.jpg"); // これはデバッグ用。バッファがコピーされているか確認。 g->DrawImage(bmp, 0, 0, cvImg.cols, cvImg.rows); // this->pictureBox3->Image = bmp; pictureBox1->Refresh(); // これは必要 delete g; delete bmp;
// どこかから cv::Mat cvImg がやってきたとする。 Bitmap^ bmp; IntPtr ip(cvImg.ptr()); // OpenCVの画像バッファをintポインタに変換 Graphics^g = pictureBox1->CreateGraphics(); // グラフィックオブジェクト作成 bmp = gcnew Bitmap(cvImg.cols, cvImg.rows, cvImg.step,System::Drawing::Imaging::PixelFormat::Format24bppRgb, ip); // bmp->Save("test.jpg"); // これはデバッグ用。バッファがコピーされているか確認。 g->DrawImage(bmp, 0, 0, cvImg.cols, cvImg.rows); // pictureBox3->Refresh(); // これは除外。動画だと画面がちらつく。 delete g; delete bmp;
0 件のコメント:
コメントを投稿