2012-10-03 5 views
2

로컬 사진 라이브러리에서 사진을로드하는 Win8/WinJS 앱을 빌드하고 있습니다. 유효한 이미지를로드하고 목록보기에 표시하는 모든 것이 일반적으로 잘 작동합니다.WinJS/WinRT : 손상된 이미지 파일을 검색합니다.

이제 손상된 이미지를 감지하고 해당 이미지에 대한 앱의 일부를 사용 중지해야합니다.

예를 들어, 텍스트 파일을 열고 텍스트를 입력하십시오. 이 파일을 .jpg 파일로 저장하십시오.이 파일은 분명히 유효한 jpg 이미지가 아닙니다. 내 응용 프로그램은 여전히 ​​.jpg 이름 때문에 파일을로드하지만 이미지가 손상되어 앱의 특정 부분을 사용 중지해야합니다.

내가로드 한 이미지가 유효한 이미지 파일인지 확인할 수있는 방법이 있습니까? 그것이 부패했는지 아닌지 확인하려면?

저는 StorageFile, Windows.Storage.Search 관련 개체 등의 표준 WinRT/WinJS 개체를 사용하여 파일 형식 검색을 기반으로 이미지 목록을로드합니다.

검색 결과에서 손상된 이미지를 걸러 낼 필요가 없습니다. 누군가가 ListView에서 그것을 선택한 후에 이미지가 손상되었는지를 알 수 있어야합니다.

답변

1

가능한 한 가지 해결책은 이미지의 widthheight 속성이 유효한지 여부를 확인하는 것입니다.

0

그래, contentType 속성은 파일 확장명이 무엇이든 반환합니다. 나는 그것을보고 찾을 수있는 가장 좋은 식으로 image properties :

SelectImagePlaceholder는 이미지 컨트롤입니다
file.properties.getImagePropertiesAsync() 
       .done(function(imageProps) { 
        if(imageProps.width === 0 && imageProps.height === 0) { 
         // I'm probably? likely? invalid. 
        }); 
0

.. =)

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 
      } 
     }