Я хочу рисовать на BitmapSource.
Источник My Frame поступает с веб-камеры в растровом виде. Я конвертирую его в BitmapSource, рисую прямоугольник и устанавливаю источник управления изображениями с привязкой данных.
//convert Bitmap to BitmapSource:
//WinForms -> WPF
public BitmapSource BitmapToBitmapSource(System.Drawing.Bitmap bitmap)
{
var bitmapData = bitmap.LockBits(
new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat);
var bitmapSource = BitmapSource.Create(
bitmapData.Width, bitmapData.Height,
bitmap.HorizontalResolution, bitmap.VerticalResolution,
PixelFormats.Bgr24, null,
bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);
bitmap.UnlockBits(bitmapData);
return bitmapSource;
}
//Drawing code:
public static BitmapSource DrawRect(BitmapSource frame)
{
RenderTargetBitmap rtb = new RenderTargetBitmap(frame.PixelWidth, frame.PixelHeight, frame.DpiX, frame.DpiY, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
dc.DrawImage(frame, new Rect(0, 0, frame.Width, frame.Height));
//dc.DrawLine(new Pen(Brushes.White, 1), new Point(0, 0), new Point(frame.Width, frame.Height));
dc.DrawRectangle(null, new Pen(Brushes.Red, 1), new Rect(50, 50, 100, 100));
}
rtb.Render(dv);
rtb.Freeze();
return rtb;
}
мои результаты использования оборудования:
ЦП: 24%
GPU: 5,4%
на Intel Core i7-4900MQ @ 2,8 ГГц; 4core; 8thread
/ NVIDIA Quadro K2100M
Результат видео не плавный, немного медленный.
Кто-нибудь знает, как я могу сделать быстрее?