【问题标题】:Is there a C# .NET built-in conversion from a text of string(parameter i.e. filename and path) and fileinfo provided to an Image type?是否有从提供给图像类型的字符串文本(参数,即文件名和路径)和文件信息的 C# .NET 内置转换?
【发布时间】:2025-11-29 10:15:01
【问题描述】:

问题:

你知道 .NET 中可以转换我的文本(字符串)并返回图像类型的东西吗?像 .Net "Convert" Class 一样,但它不支持图像转换。 我的意思是..就像传递文件信息(文件名和路径)作为参数并返回图像(位图)以显示。 我真的必须手动编码吗?

场景:

成功在一个目录(从闪存驱动器或本地驱动器中)收集了一些图像文件列表,并希望将它们显示为实际图像。

希望我的问题很清楚。

【问题讨论】:

    标签: c# .net wpf silverlight


    【解决方案1】:

    根据您使用的是 WinForms 还是 WPF,您可以使用 System.Drawing.ImageSystem.Windows.Media.ImageSource

    您无法将字符串转换为屏幕图像。您必须将其加载到另一个组件中。例如,Image 有一个静态的FromFile(string filepath) 方法,可以加载图像并使其可用于显示。

    【讨论】:

    • FromFile() 有效。!!我很高兴知道这种方法,而不是从头开始。我还是 C# 新手。非常感谢。
    【解决方案2】:

    实现IValueConverter接口,返回位图。

    public class MyValueConverter : IValueConverter    {        
    
    /*
    Implement this method to modify the source data before sending it to display
    */
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)        {
                try            {
                   return new BitmapImage(new Uri("../Images/" + (string)(value), UriKind.Relative));
                }
                catch{
                    return new BitmapImage();
                }
            }
     /*
    Implement this method to modify the target data before sending it back to the source.
    */
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)        { 
                var img = value as BitmapImage;
                return img.UriSource.AbsoluteUri;
            }
    
        }
    

    【讨论】:

    • 这对内存消耗来说不是有风险吗?
    • 我没有考虑过这一点,但我的主要目标是它可以跨 WPF、Silverlight、WP7 重用...
    • 没错,但在我看来,使用过多的转换器会大大降低程序的速度。我更喜欢将我的对象包装在暴露 WPF 可以直接处理的东西的类型中。我保持我的转换器简单,例如 BooleanSystem.Windows.Visibility 并返回。
    【解决方案3】:

    你可以使用Bitmap.FromFile("FileName")或者你可以使用Image.FromFile("FileName")。如果你想得到一个位图数组你可以使用一个简单的linq查询

     var fileNames = new string[] { "file1", "file2", "file3" };
     var myImages = fileNames.Select(x => Bitmap.FromFile(x)).ToArray();
    

    【讨论】:

      最近更新 更多