• 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 Settingszp桌面桌面秀10111411409225.jpg

      srceFileName =C:Documents and Settingszp桌面桌面秀10111411409225.jpg

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

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

  • 相关阅读:
    C#后台解析XML字符串并获取节点值
    table动态添加tr
    时间段检索时间段
    什么是数据结构
    PERSONAL VALUES
    C#接口
    基于ArcEngine与C#的鹰眼地图实现
    ENVI/IDL与ArcGIS集成开发的三种途径
    中国地图投影(实现Lambert投影)
    Git 的下载
  • 原文地址:https://www.cnblogs.com/tianma3798/p/4520033.html
Copyright © 2020-2023  润新知