当前位置:  开发笔记 > 编程语言 > 正文

如何将图标(Bitmap)转换为ImageSource?

如何解决《如何将图标(Bitmap)转换为ImageSource?》经验,为你挑选了2个好方法。

我的wpf应用程序中有一个按钮和一个名为image1的图像.我想从位置或文件路径的文件图标添加image1的图像源.这是我的代码:

using System.Windows;
using System.Windows.Media.Imaging;
using System.IO;
using System.Drawing;

namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Icon ico = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe");
            image1.Source = ico.ToBitmap();
        }
    }
}

错误在于说

无法将类型'System.Drawing.Bitmap'隐式转换为'System.Windows.Media.ImageSource'

如何解决这个问题呢?



1> Fᴀʀʜᴀɴ Aɴᴀᴍ..:

您得到的错误是因为您尝试将位图指定为图像的来源.要纠正这个问题,请使用此功能:

BitmapImage BitmapToImageSource(Bitmap bitmap)
{
    using (MemoryStream memory = new MemoryStream())
    {
        bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
        memory.Position = 0;
        BitmapImage bitmapimage = new BitmapImage();
        bitmapimage.BeginInit();
        bitmapimage.StreamSource = memory;
        bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
        bitmapimage.EndInit();

        return bitmapimage;
    }
}

像这样:

image1.Source = BitmapToImageSource(ico.ToBitmap());



2> Thomas Leves..:

Farhan Anam建议的解决方案可行,但并不理想:图标从文件加载,转换为位图,保存到流中并从流中重新加载.那是非常低效的.

另一种方法是使用System.Windows.Interop.Imaging类及其CreateBitmapSourceFromHIcon方法:

private ImageSource IconToImageSource(System.Drawing.Icon icon)
{
    return Imaging.CreateBitmapSourceFromHIcon(
        icon.Handle,
        new Int32Rect(0, 0, icon.Width, icon.Height),
        BitmapSizeOptions.FromEmptyOptions());
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    using (var ico = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe"))
    {
        image1.Source = IconToImageSource(ico);
    }
}

请注意在using转换后处理原始图标的块.不这样做会导致手柄泄漏.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有