我使用ffmpeg解码H.264流。我有一个指向内存中图像数据的指针,我可以使用以下代码创建WritableBitmap:
var _rmlive = new WriteableBitmap(e.Width, e.Hieght, 1, 1, PixelFormats.Bgr24, null);
_rmlive.WritePixels(_rectLive, e.PointerToBuffer, _arraySize, e.Stride);
我可以使用以下代码从指针中获取一个Bitmap对象:
byte[] inBytes = new byte[size];
Marshal.Copy(ptr, inBytes, 0, (int)size);
var b = new Bitmap(width, height, PixelFormat.Format24bppRgb);
var BoundsRect = new System.Drawing.Rectangle(0, 0, width, height);
BitmapData bmpData = b.LockBits(BoundsRect,
ImageLockMode.WriteOnly,
b.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride * b.Height;
try
{
Marshal.Copy(inBytes, 0, ptr, bytes);
}
catch (Exception e)
{
}
finally
{
b.UnlockBits(bmpData);
}
然后我可以在WPF中渲染和显示它,但它消耗了大量的CPU资源(特别是对于全高清帧)。 问题是可以直接从指针渲染/显示图像而无需在c#/ WPF中创建Bitmap / WritableBitmap吗?