Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13031500
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C#/.net

2016-01-04 19:57:16


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Collections;
  7. using System.Security.Cryptography;
  8. using System.Windows.Controls;
  9. using System.ComponentModel;
  10. using System.Collections.ObjectModel;
  11. using System.Runtime.InteropServices;

  12. namespace DrawWpf
  13. {
  14.     class FrmClass
  15.     {
  16.         #region 提供两种给Image的Source赋值的方法
  17.         public static System.Windows.Media.ImageBrush GetImageBrushFrom_PResource(System.Drawing.Bitmap imgSrc)
  18.         {
  19.             System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(imgSrc);
  20.             MemoryStream stream = new MemoryStream();

  21.             bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
  22.             System.Windows.Media.ImageBrush imgBrush = new System.Windows.Media.ImageBrush();
  23.             System.Windows.Media.ImageSourceConverter isConverter = new System.Windows.Media.ImageSourceConverter();
  24.             imgBrush.ImageSource = (System.Windows.Media.ImageSource)isConverter.ConvertFrom(stream);

  25.             return imgBrush;
  26.         }

  27.         [DllImport("gdi32.dll", SetLastError = true)]
  28.         private static extern bool DeleteObject(IntPtr hObject);
  29.         //将 Bitmap转换为BitmapSource
  30.         //使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。
  31.         public static System.Windows.Media.ImageSource BitmapToBitmapSource(System.Drawing.Bitmap bitmap)
  32.         {
  33.             IntPtr hBitmap = bitmap.GetHbitmap();
  34.             System.Windows.Media.ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
  35.                 hBitmap,
  36.                 IntPtr.Zero,
  37.                 System.Windows.Int32Rect.Empty,
  38.                 System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
  39.             if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。
  40.             {
  41.                 throw new System.ComponentModel.Win32Exception();
  42.             }

  43.             return wpfBitmap;
  44.         }
  45.         #endregion

  46.     }
  47. }
调用方法:
  1. Random rdm = new Random();
  2. this.image1.Source = FrmClass.BitmapToBitmapSource(AppResource.Vote);
  3. this.image2.Source = FrmClass.GetImageBrushFrom_PResource(AppResource.Vote).ImageSource;

参考文献:

阅读(7722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~