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

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

  本文来自zoop89850的博客,原文地址:http://www.cnblogs.com/zp89850/archive/2011/10/27/2226039.html

posted @ 2015-05-21 16:11  天马3798  阅读(3226)  评论(0编辑  收藏  举报