问题:
使用 CreateBitmapSourceFromHBitmap
以 30Hz 显示图像的 WPF 应用程序通常会遇到高 CPU 使用率(约 80%),从而影响性能。 这是由于转换过程固有的缓慢造成的。
根本原因:
CreateBitmapSourceFromHBitmap
方法对于高频图像更新效率较低。
改进的解决方案:
一种更快的方法涉及直接内存访问和显式 PixelFormat 规范:
<code class="language-csharp">public static BitmapSource Convert(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; }</code>
这种优化方法直接访问位图的像素数据,指定PixelFormats.Bgr24
格式,从而绕过CreateBitmapSourceFromHBitmap
的性能瓶颈,从而大幅降低CPU占用率,确保在所需帧率下图像显示更流畅。
以上是如何在 WPF 中加快位图到 BitmapSource 的转换以实现高效的图像显示?的详细内容。更多信息请关注PHP中文网其他相关文章!