private BitmapSource GetUiImage(FrameworkElement ui)
{
RenderTargetBitmap bmp=new RenderTargetBitmap((int)ui.ActualWidth,(int)ui.ActualHeight,96d,96d, PixelFormats.Default);
bmp.Render(ui);
return bmp;
}
獲取控件當前呈現的圖像,然后從這個圖像中截取一部分區域,我這邊先用的方法如下:
using (Mat mat = bmp.ToMat())
{
Rect rect1 = new Rect((int) rect.Left, (int) rect.Top, (int) rect.Width, (int) rect.Height);
using (Mat mat8U = mat[rect1])
{
return mat8U.ToBitmap();
}
}
但是在執行的時候一直抱如下錯誤:
Depth of the image must be CV_8U
原來bmp.ToMat()轉換后的mat是一個CV_32U的,在執行ROI區域截取時就會出錯。
那么看來是不能直接用tomat方法,只能換個方法轉換,如下:

BitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(bmp)); using (Stream sr = new MemoryStream()) { encoder.Save(sr); using (Mat mat = Mat.FromStream(sr, ImreadModes.Color)) { Rect rect1 = new Rect((int) rect.Left, (int) rect.Top, (int) rect.Width, (int) rect.Height); using (var mat1 = mat[rect1]) { return mat1.ToBitmap(); } } }
執行,完美通過。