WPF Image控件中的ImageSource与Bitmap的互相转换

时间:2016-03-02 14:41:53   收藏:0   阅读:273
原文: WPF Image控件中的ImageSource与Bitmap的互相转换



1.从bitmap转换成ImageSource

	[DllImport("gdi32.dll", SetLastError = true)]

        private static extern bool DeleteObject(IntPtr hObject);

 

        /// <summary>

        /// 从bitmap转换成ImageSource

        /// </summary>

        /// <param name="icon"></param>

        /// <returns></returns>

        public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap)

        {

            //Bitmap bitmap = icon.ToBitmap();

            IntPtr hBitmap = bitmap.GetHbitmap(); 


            ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

                hBitmap,

                IntPtr.Zero,

                Int32Rect.Empty,

                BitmapSizeOptions.FromEmptyOptions()); 


            if (!DeleteObject(hBitmap))

            {

                throw new System.ComponentModel.Win32Exception();

            } 


            return wpfBitmap;

        }

2.从Bitmap转换成BitmapSource

	/// <summary>

        /// 从Bitmap转换成BitmapSource

        /// </summary>

        /// <param name="bmp"></param>

        /// <returns></returns>

        public static BitmapSource ChangeBitmapToBitmapSource(this Bitmap bmp)

        {

            BitmapSource returnSource; 


            try

            {

                returnSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(),IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());              

            }

            catch

            {

                returnSource = null;

            } 


            return returnSource; 


        }

3.从Icon到ImageSource的转换

	/// <summary>

        /// 从Icon到ImageSource的转换

        /// </summary> 

        public ImageSource ChangeIconToImageSource( Icon icon)

        {

            ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(

                icon.Handle,

                Int32Rect.Empty,

                BitmapSizeOptions.FromEmptyOptions()); 


            return imageSource;

        }


4.从Icon到ImageSource的转换

internal static class IconUtilities 
 { 
     [DllImport("gdi32.dll", SetLastError = true)] 
     private static extern bool DeleteObject(IntPtr hObject); 
  
     public static ImageSource ToImageSource(this Icon icon) 
     {             
         Bitmap bitmap = icon.ToBitmap(); 
         IntPtr hBitmap = bitmap.GetHbitmap(); 
  
         ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap( 
             hBitmap, 
             IntPtr.Zero, 
             Int32Rect.Empty, 
             BitmapSizeOptions.FromEmptyOptions()); 
  
         if (!DeleteObject(hBitmap)) 
         { 
             throw new Win32Exception(); 
         } 
  
         return wpfBitmap; 
     } 



  // 这个是没有附加转换的,:)
  public static ImageSource ToImageSource(this Icon icon)
    {
        ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
            icon.Handle,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());

        return imageSource;
    }

 } 
调用:ImageSource wpfBitmap = img.ToImageSource(); 
参考:http://stackoverflow.com/questions/1127647/convert-system-drawing-icon-to-system-media-imagesource


5.从ImageSource转换成Bitmap,是从ImageSource中取出UriSource.LocalPath,然后使用 new Bitmap(FileName)的方法获取。其他的方法我还没有找到,

// System.Windows.Controls.Image ImgUserHeadFaceCutEdit;

string str1 = ((BitmapImage)(ImgUserHeadFaceCutEdit.Source)).UriSource.AbsolutePath;// 此路径new Bitmap(str1)无法识别

string str2 = ((BitmapImage)(ImgUserHeadFaceCutEdit.Source)).UriSource.LocalPath ; 

//Bitmap sourceImage = new Bitmap(sourceImageUri.ToString());

string str3 = strImgSourceFileName;

Console.WriteLine("AbsolutePath =" + str1);

Console.WriteLine("LocalPath =" + str2); 

Console.WriteLine("srceFileName =" + str3);

这是运行结果:

AbsolutePath =C:/Documents%20and%20Settings/zp/%E6%A1%8C%E9%9D%A2/%E6%A1%8C%E9%9D%A2%E7%A7%80/10111411409225.jpg

LocalPath =C:\Documents and Settings\zp\桌面\桌面秀\10111411409225.jpg

srceFileName =C:\Documents and Settings\zp\桌面\桌面秀\10111411409225.jpg

 

 谁找到了实现方法,留言下啊


转自:http://www.cnblogs.com/zp89850/archive/2011/10/27/2226039.html


原文:http://www.cnblogs.com/lonelyxmas/p/5234690.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!