我正在Visual Studio 2010中创建一个Windows窗体应用程序。
我采用了button
和picture box
。
我正在从内存中读取图像,我希望这个图像直接显示在图片框中,而不会将其保存在内存中。
以下代码保存图像,然后将其加载到图片框中。 如何改进此代码以执行所需的任务。
#pragma endregion private: System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e) {
>
> Mat im = imread("C:/Users/Ravi Sharma/Desktop/Koala.jpg");
> if (im.empty())
> {
> cout << "Cannot load image!" << endl;
> exit;
> }
>
> imwrite("C:/Users/Ravi Sharma/Desktop/Koalanew.jpg",im);
> imshow("Image", im);
> picturebox->Image=Image::FromFile("C:/Users/Ravi Sharma/Desktop/Koalanew.jpg");
> }
经过一些改进 我的新代码是
> System::Void btn1_Click(System::Object^ sender, System::EventArgs^ e)
> {
> cv::Mat cvImage = cv::imread("C:/Users/Ravi Sharma/Desktop/Koala.jpg");
>
> if (cvImage.empty())
> {
> cout << "Cannot load image!" << endl;
> exit;
> }
>
> Bitmap^ bmImage = gcnew Bitmap(cvImage.cols, cvImage.rows, 3 * cvImage.cols, PixelFormat.Format24bppRgb, IntPtr(cvImage.data));
> Image^ image = static_cast<Bitmap^>(bmImage);
> picturebox->Image=Image.bmImage;
> }
答案 0 :(得分:0)
您可以从指向包含像素数据的字节数组的指针创建Bitmap
(在您的情况下,这是一个cv::Mat
对象),然后将其强制转换为{{1} }}:
Image