問題:
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 中国語 Web サイトの他の関連記事を参照してください。