Problème :
Les applications WPF affichant des images à 30 Hz à l'aide de CreateBitmapSourceFromHBitmap
connaissent souvent une utilisation élevée du processeur (environ 80 %), ce qui a un impact sur les performances. Cela est dû à la lenteur inhérente du processus de conversion.
Cause fondamentale :
La méthode CreateBitmapSourceFromHBitmap
est inefficace pour les mises à jour d'images à haute fréquence.
Solution améliorée :
Une approche nettement plus rapide implique un accès direct à la mémoire et une spécification explicite de 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>
Cette méthode optimisée accède directement aux données de pixels du bitmap, en spécifiant le format PixelFormats.Bgr24
, contournant ainsi le goulot d'étranglement des performances de CreateBitmapSourceFromHBitmap
et entraînant une réduction substantielle de l'utilisation du processeur, garantissant un affichage plus fluide de l'image à la fréquence d'images souhaitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!