Passage bitmapimage / bitmap et utilisation bitmapimage sans lock..

Soyez le premier à donner votre avis sur cette source.

Vue 5 411 fois - Téléchargée 186 fois

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

Ajouter un commentaire

Commentaires

jantosze
Messages postés
72
Date d'inscription
mercredi 29 mai 2013
Statut
Membre
Dernière intervention
15 mai 2009

re Salut,

Merci pour ce complément à ton post Bitmap generateBitmap(), qui m' a permis de finaliser un petit prog d'essai. ce dernier lit les UIElement de la page, les converse en Bitmap et créer un fichier dans le codec souhaité.

cdt
JAN
stb2680
Messages postés
9
Date d'inscription
samedi 4 octobre 2003
Statut
Membre
Dernière intervention
10 mars 2011

Salut,

Je suis en train de basculer de C++ au C#, et c'est vrai que c'est un peu perturbant le changement. Je cherche à récupérer dans 1 tableau de byte mes pixels en niveau de gris d'une BMP, et j'ai vraiment l'impression de demander la lune !!!
A part me tape tout le stream à la main (lecture octet par octet et décodage de tout le fichier), est-ce qu'il y a un moyen plus sympas avec justement BitmapImage ou BitmapSource ? Car là, j'ai pas trouvé :( ...

Merci de ton retour,
Cdlt,
Stb

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.