gpt4 book ai didi

c# - 图标到 ImageSource 的运行时转换

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:56 27 4
gpt4 key购买 nike

我编写了一个从操作系统获取文件图标并绑定(bind)到它们的应用程序,但是自从 System.Drawing.Icon对象不能用作 ImageSourceImage 中控制,我不得不写一个converter .

经过一番搜索后,我找到了以下代码,我目前正在使用它:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Icon ico = (value as Icon);
Bitmap bits = ico.ToBitmap();
MemoryStream strm = new MemoryStream();

// add the stream to the image streams collection so we can get rid of it later
_imageStreams.Add(strm);
bits.Save(strm, System.Drawing.Imaging.ImageFormat.Png);
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = strm;
bitmap.EndInit();

// freeze it here for performance
bitmap.Freeze();
return bitmap;
}

我有三个问题:

  1. 您有更好的解决方案吗?

  2. 最终关闭使用的 MemoryStream 的最佳方法是什么,因为绑定(bind)系统会自动调用此处的代码? (它们永远不会手动实例化,正如您可能注意到的那样,我将流添加到一个集合中,我在析构函数中对它们调用了 Close(),但我认为这不是一个好的解决方案)。

  3. 与上一个问题相关,当我尝试在函数结束前关闭流时,图像显示为空,即使我调用 Stream.Flush() 也是如此。在那之前。这是为什么?

最佳答案

我最近在尝试将项目资源 (WindowIcon) 中的图标分配给 Window.Icon ImageSource 时取得了以下成功:

using System.Drawing;
using System.Windows.Media;

...

Icon someIcon = Properties.Resources.WindowIcon;
Bitmap someBitmap = someIcon.ToBitmap();
this.Icon = (ImageSource)new ImageSourceConverter().ConvertFrom(someBitmap);

关于c# - 图标到 ImageSource 的运行时转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13104637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com