Problem:
WPF-Anwendungen, die Bilder mit 30 Hz unter Verwendung von CreateBitmapSourceFromHBitmap
anzeigen, weisen häufig eine hohe CPU-Auslastung (ca. 80 %) auf, was sich auf die Leistung auswirkt. Dies liegt an der inhärenten Langsamkeit des Konvertierungsprozesses.
Grundursache:
Die CreateBitmapSourceFromHBitmap
Methode ist für hochfrequente Bildaktualisierungen ineffizient.
Verbesserte Lösung:
Ein deutlich schnellerer Ansatz beinhaltet den direkten Speicherzugriff und die explizite PixelFormat-Spezifikation:
<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>
Diese optimierte Methode greift direkt auf die Pixeldaten der Bitmap zu und gibt das PixelFormats.Bgr24
-Format an. Dadurch wird der Leistungsengpass von CreateBitmapSourceFromHBitmap
umgangen, was zu einer erheblichen Reduzierung der CPU-Auslastung führt und eine flüssigere Bildanzeige bei der gewünschten Bildrate gewährleistet.
Das obige ist der detaillierte Inhalt vonWie kann ich die Konvertierung von Bitmaps in BitmapSource in WPF für eine effiziente Bildanzeige beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!