一,
writeableBitmap^转换为byte*,借鉴的大神的博客地址:http://blog.csdn.net/tempzjut/article/details/7715201 ;下面只做备份,尊重原创!!
byte* BufferFromWriteableBitmap(WriteableBitmap^ bitmap)
{
IUnknown* pUnknown = reinterpret_cast<IUnknown*>(bitmap->PixelBuffer);
IBufferByteAccess* pBufferByteAccess = nullptr;
HRESULT hr = pUnknown->QueryInterface(IID_PPV_ARGS(&pBufferByteAccess));
pUnknown->Release();
byte *pPixels = nullptr;
hr = pBufferByteAccess->Buffer(&pPixels);
return pPixels;
}
需要引用头文件和命名空间
#include "Robuffer.h"
using namespace Windows::Storage::Streams;
二,
我用转换成功的byte*放入opencv中处理图片
cv::Mat mMat(image->PixelHeight, image->PixelWidth, CV_8UC4, BufferFromWriteableBitmap(image));
cv::rectangle(mMat, cv::Rect(100, 100, 400, 400), cv::Scalar(255, 255, 255, 255), -1);
现在问题来了,我处理完了怎么给它传回c#
后来高手指点才知道,他这个byte*就是writeableBitmap^的内存里的数据,所以,用opencv处理的的Mat,其实就是传进来的WriteableBitmap^。
不过有一点要注意,处理完了之后要调用一下 image->Invalidate()才行;
总结:
还是我对原理理解的不够深,要学就学深层次的