Passage bitmapimage / bitmap et utilisation bitmapimage sans lock..

Description

Depuis l'arrivée de WPF et du BitmapImage, il est très souvent difficile de réutiliser nos anciennes librairies graphiques dès lors que l'on utilisait l'objet Bitmap.

Comment faire, pour passer de l'un à l'autre, et surtout en utilisant l'objet BitmapImage comment ne pas locker la ressource?

La première méthode "getBitmapImage" va vous permettre de créer un BitmapImage à partir d'une image sans locker cette image. Ce qui est très pratique dans les IHM de gestion de contenu.

Le seconde méthode "loadBitmap" va vous permettre d'obtenir le BitmapSource directement depuis un Bitmap. Il suffira de l'affecter au membre "Source" de votre BitmapImage.

Source / Exemple :


using System;
using System.Collections.Generic;
using System.Windows.Media.Imaging;

...

/*

    • Méthode permettant de charger un BitmapImage
    • sans locker la ressource graphique.
  • /
public static BitmapImage getBitmapImage(String pathImage) { try { System.IO.FileStream fs = System.IO.File.Open(pathImage, System.IO.FileMode.Open); byte[] buffer = new byte[Convert.ToInt32(fs.Length)]; fs.Read(buffer, 0, Convert.ToInt32(fs.Length)); System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer); BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = ms; image.EndInit(); image.Freeze(); fs.Close(); fs.Dispose(); return image; } catch (Exception) { return new BitmapImage(); } } /*
    • Méthode permettant d'obtenir un BitmapSource
    • à partir d'un Bitmap.
  • /
public static BitmapSource loadBitmap(System.Drawing.Bitmap source) { return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( source.GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions() ); } ...

Conclusion :


Une bonne connaissance de la gestion des images au travers des objets "BitmapImage" et "Bitmap" va vous faire gagner énormement de temps dans tous vos développements. N'hésitez pas à développer votre propre librairie graphique.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.