WinJS / WinRT:检测损坏的图像文件

时间:2012-10-03 17:06:24

标签: windows-8 windows-runtime winjs storagefile

我正在构建一个Win8 / WinJS应用程序,用于加载本地图片库中的图片。一切通常都能很好地加载有效图像并在列表视图中显示它们。

现在我需要检测损坏的图像并禁用这些图像的应用程序部分。

例如,打开文本文件并在其中输入一些文本。将文件另存为.jpg,这显然不是一个有效的jpg图像。我的应用程序仍然因为.jpg名称而加载文件,但现在我需要禁用应用程序的某些部分,因为图像已损坏。

有没有办法可以检查我加载的给定图像是否是有效的图像文件?检查它是否腐败?

我正在使用标准的WinRT / WinJS对象,如StorageFile,Windows.Storage.Search相关对象等,根据对文件类型的搜索来加载我的图像列表。

我不需要从搜索结果中滤除损坏的图像。我只需要能够在有人在ListView中选择图像后判断图像是否已损坏。

3 个答案:

答案 0 :(得分:1)

一种可能的解决方案是检查图像的widthheight属性,以确定它是否有效。

答案 1 :(得分:0)

是的,contentType属性将返回文件扩展名。我可以通过最好的方式查看image properties

file.properties.getImagePropertiesAsync()
               .done(function(imageProps) {
                   if(imageProps.width === 0 && imageProps.height === 0) {
                       // I'm probably? likely? invalid.
                   });

答案 2 :(得分:0)

其中SelectImagePlaceholder是一个图像控件.. =)

  

StorageFile文件;

        using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
        {
            try
            {
                // Set the image source to the selected bitmap
                BitmapImage bitmapImage = new BitmapImage();

                await bitmapImage.SetSourceAsync(fileStream);


                SelectImagePlaceholder.Source = bitmapImage;
                //SelectImagePlaceholder.HorizontalAlignment = HorizontalAlignment.Center;
                //SelectImagePlaceholder.Stretch = Stretch.None;
                this.SelectImagePlaceholder.DataContext = file;

                _curMedia = file;
            }
            catch (Exception ex)
            {
                //code Handle the corrupted or invalid image
            }
        }