惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
Y
Y Combinator Blog
Recorded Future
Recorded Future
博客园 - Franky
I
InfoQ
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
Cloudbric
Cloudbric
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Check Point Blog
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
U
Unit 42
N
Netflix TechBlog - Medium
The Cloudflare Blog
Spread Privacy
Spread Privacy
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
T
Troy Hunt's Blog
Engineering at Meta
Engineering at Meta
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
C
Cybersecurity and Infrastructure Security Agency CISA
T
Tenable Blog
B
Blog
S
Securelist
H
Hacker News: Front Page
Google Online Security Blog
Google Online Security Blog
G
Google Developers Blog

博客园 - zoop89850

maven 打包 时出现非法字符: /65279错误 JAVA学习笔记 第一篇 开发环境 传输文件过程中遇到异常被中断 项目所需的应用程序未安装,确保已安装项目类型(.csproj)的应用程序的解决办法[转] 窗体的置顶显示 WPF加载相对路径的图片的解决方法 2011/08/27 刷机器,遭遇白苹果,不可连接ipod服务器 的解决 将截图图片放入内存(剪贴板)中 C# 获取屏幕的大小 C# WinForm急速系列 – DataGridView 附Word文档 转载:MicrosoftHelp文件夹中后缀名为.hxw .hxm之类的文件是MSDN帮助文档的索引,不要轻易删除 利用case或者decode实现自定义顺序排序 【摘】枚举类型 一种简单的根据备份文件 恢复数据库的方法 计算sql语句的执行时间 Java,JavaScript,JScript 区别 HTML代码简单教程 文件夹无法打开怎么办? - zoop89850 - 博客园 sqlserver提示“在流水模式下,事务无法启动”的解决办法
WPF Image控件中的ImageSource与Bitmap的互相转换
zoop89850 · 2011-10-27 · via 博客园 - zoop89850

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;

        }

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

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