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();
        }

    }
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2021-06-07
  • 2021-09-01
  • 2021-12-24
  • 2021-12-10
猜你喜欢
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案