C++ CLR Opencv Mat to Bitmap
2022/2/20 22:29:11
本文主要是介绍C++ CLR Opencv Mat to Bitmap,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#pragma managed #ifndef _DEBUG #pragma comment(lib,"opencv_world455.lib") #else #pragma comment(lib,"opencv_world455d.lib") #endif using namespace System; using namespace System::Drawing; using namespace System::Drawing::Imaging; namespace OpencvCLRExtention { public ref class BitmapExtention { // TODO: 在此处为此类添加方法。 public: static Bitmap^ ResizeImage(BitmapData^ bitmapData, int newW, int newH); static Bitmap^ ResizeImageNew(BitmapData^ bitmapData, int newW, int newH); }; }
#include "pch.h" #include "OpencvCLRExtention.h" using namespace System::IO; using namespace System::Runtime::InteropServices; using namespace cv; Bitmap^ OpencvCLRExtention::BitmapExtention::ResizeImage(BitmapData^ bitmapData, int newW, int newH) { // TODO: 在此处插入 return 语句 Mat source = Mat(bitmapData->Height, bitmapData->Width, CV_8UC3, bitmapData->Scan0.ToPointer(), bitmapData->Stride); cv::Size size = cv::Size(newW, newH); Mat img; cv::resize(source, img, size); Bitmap^ bmp = gcnew Bitmap(newW, newH,img.step, PixelFormat::Format24bppRgb, (IntPtr)img.data); array< Byte >^ imageData; Bitmap^ output; // Create the byte array. { MemoryStream^ ms = gcnew MemoryStream(); bmp->Save(ms, ImageFormat::Jpeg); imageData = ms->ToArray(); delete ms; } // Convert back to bitmap { MemoryStream^ ms = gcnew MemoryStream(imageData); output = (Bitmap^)Bitmap::FromStream(ms); } delete bmp; return output; } Bitmap^ OpencvCLRExtention::BitmapExtention::ResizeImageNew(BitmapData^ bitmapData, int newW, int newH) { // TODO: 在此处插入 return 语句 Mat source = Mat(bitmapData->Height, bitmapData->Width, CV_8UC3, bitmapData->Scan0.ToPointer(), bitmapData->Stride); cv::Size size = cv::Size(newW, newH); Mat img; cv::resize(source, img, size); Bitmap^ resultimage = nullptr; resultimage = gcnew Bitmap(newW, newH, PixelFormat::Format24bppRgb); BitmapData^ resultimageData = resultimage->LockBits(Rectangle(0, 0, newW, newH), ImageLockMode::ReadWrite, resultimage->PixelFormat); int actualWidth = newW * 3; int offset = resultimageData->Stride - actualWidth; uchar* outputData_b = (uchar*)(void*)resultimageData->Scan0; uchar* imgdata = img.data; int posreal = 0, posscan = 0; for (int r = 0; r < newH; r++) { for (int c = 0; c < actualWidth; c++) { outputData_b[posscan++] = imgdata[posreal++]; } posscan += offset; } resultimage->UnlockBits(resultimageData); return resultimage; }
这篇关于C++ CLR Opencv Mat to Bitmap的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享