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

本文详细介绍了如何在WPFImage控件中将Bitmap转换为ImageSource以及如何从ImageSource转换回Bitmap,包括从Icon到ImageSource的转换过程,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

 

posted on 2011-10-27 10:05 zoop89850 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/zp89850/archive/2011/10/27/2226039.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值