确定WPF是否可以加载图像文件的最佳方法是什么?
有没有办法确定WPF是否能够加载图像文件而不尝试构造BitmapImage并在失败时捕获exception?
我正在创建一个图像浏览器,试图显示可移动驱动器上所有图像的预览。 可能有很多文件不是图像,并且每个文件都捕获exception似乎效率低下但是我想不出一种不容易出错的方法。
有什么建议?
谢谢,马克
我最近问了一个非常相似的问题,并在这里得到了很好的答案。
基本上,您可以在用户的计算机上找到BitmapImage可用于打开各种图像格式的所有编解码器。 从这些编解码器中,您可以构建这些可以打开的文件扩展名列表。
然后,当您的程序尝试打开文件时,请根据此列表检查该文件的扩展名。
WPF使用WIC来处理图像。 它包含一组处理常见图像格式的核心编解码器,我相信您可以从这里对这些扩展进行硬编码。 WIC也是可扩展的,因此,例如,相机制造商可以将自定义图像格式合并到WIC中。 上面的答案中的代码会在您的计算机中搜索这些额外的编解码器,并为这些编解码器提供相应的文件扩展名。
此方法假定文件扩展名对于文件是正确的。 在大多数情况下,这通常是一个公平的假设 – 即使Windows资源管理器很乐意假设这一点。 仍然,我会将BitmapImage结构包装在try-catch中,如果奇数流氓文件出现在扩展名显示为图像的位置,但它仍然无法打开。
编辑:我还将此function包装到一个类中,您可以将其复制粘贴到您自己的项目中。
WPF使用WIC,您想要的是在MSDN中的C ++中演示,但框架的反编译源显示IWICImagingFactory::CreateComponentEnumerator
甚至没有在框架的内部类中公开。
您最好的解决方案是创建一个支持的静态扩展列表(WIC支持的格式在MSDN上 )并使用它。
首先,您可以尝试检查图像文件扩展名,以validation您的应用程序是否能够读取它。
然后你必须从C#中的文件中读取validation图像
这里获取图像尺寸而不读取整个文件
我在StackOverflow的另一个问题中找到了答案,但我不记得我从中得到的问题。 无论如何,这里是我写的一些代码,基于该问题的答案之一:
public static string GetImageFileExtension( byte[] plateImage ) { string imageFileExtension = String.Empty; using ( Stream ms = new MemoryStream( plateImage ) ) { BitmapDecoder decoder = BitmapDecoder.Create( ms, BitmapCreateOptions.None, BitmapCacheOption.None ); if ( decoder is BmpBitmapDecoder ) imageFileExtension = ".bmp"; else if ( decoder is GifBitmapDecoder ) imageFileExtension = ".gif"; else if ( decoder is IconBitmapDecoder ) imageFileExtension = ".ico"; else if ( decoder is JpegBitmapDecoder ) imageFileExtension = ".jpg"; else if ( decoder is PngBitmapDecoder ) imageFileExtension = ".png"; else if ( decoder is TiffBitmapDecoder ) imageFileExtension = ".tiff"; else if ( decoder is WmpBitmapDecoder ) imageFileExtension = ".wmp"; } return imageFileExtension; }
这在生产代码中很有效。
上述就是C#学习教程:确定WPF是否可以加载图像文件的最佳方法是什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014881.html