75 votes

Utilisation du contrôle d'image dans WPF pour afficher System.Drawing.Bitmap

Comment puis-je attribuer une en mémoire Bitmap objet à un Image contrôle WPF?

86voto

Lars Truijens Points 24005

Selon http://khason.net/blog/how-to-use-systemdrawingbitmap-hbitmap-in-wpf/

    [DllImport("gdi32")]
   static extern int DeleteObject(IntPtr o);

   public static BitmapSource loadBitmap(System.Drawing.Bitmap source)
   {
       IntPtr ip = source.GetHbitmap();
       BitmapSource bs = null;
       try
       {
           bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip, 
              IntPtr.Zero, Int32Rect.Empty, 
              System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
       }
       finally
       {
           DeleteObject(ip);
       }

       return bs;
   }
 

Il récupère System.Drawing.Bitmap (à partir de Windows) et le convertit en BitmapSource, qui peut être utilisé comme source d’image pour votre contrôle Image dans WPF.

 image1.Source = YourUtilClass.loadBitmap(SomeBitmap);
 

16voto

Badiboy Points 529

C'est facile pour les fichiers sur disque, mais plus difficile pour Bitmap en mémoire.

 System.Drawing.Bitmap bmp;
Image image;
...
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();

image.Source = bi;
 

Volé ici

2voto

Mr47 Points 29

J'ai écrit un programme avec wpf et utilisé la base de données pour montrer des images et voici mon code:

 SqlConnection con = new SqlConnection(@"Data Source=HITMAN-PC\MYSQL;
                                      Initial Catalog=Payam;
                                      Integrated Security=True");

SqlDataAdapter da = new SqlDataAdapter("select * from news", con);

DataTable dt = new DataTable();
da.Fill(dt);

string adress = dt.Rows[i]["ImgLink"].ToString();
ImageSource imgsr = new BitmapImage(new Uri(adress));
PnlImg.Source = imgsr;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X