2 Stimmen

WinJS / WinRT: Beschädigte Bilddatei erkennen

Ich baue eine Win8/WinJS-App auf, die Bilder aus der lokalen Bilderbibliothek lädt. Alles funktioniert im Allgemeinen gut für das Laden gültiger Bilder und deren Anzeige in einer Listenansicht.

Jetzt muss ich beschädigte Bilder erkennen und Teile der Anwendung für diese Bilder deaktivieren.

Öffnen Sie zum Beispiel eine Textdatei und geben Sie einen Text ein. Speichern Sie die Datei als .jpg, was natürlich kein gültiges jpg-Bild sein wird. Meine Anwendung lädt die Datei aufgrund des .jpg-Namens trotzdem, aber jetzt muss ich bestimmte Teile der Anwendung deaktivieren, weil das Bild beschädigt ist.

Gibt es eine Möglichkeit, zu überprüfen, ob ein bestimmtes Bild, das ich geladen habe, eine gültige Bilddatei ist? Um zu prüfen, ob es beschädigt ist oder nicht?

Ich bin mit Standard-WinRT / WinJS-Objekte wie StorageFile, Windows.Storage.Search verwandte Objekte, etc, zu laden, meine Bild-Liste auf der Grundlage von Suchen nach Dateitypen.

Ich brauche keine beschädigten Bilder aus den Suchergebnissen herauszufiltern. Ich muss nur in der Lage sein, zu erkennen, ob ein Bild beschädigt ist, nachdem jemand es in einer ListView ausgewählt hat.

1voto

Kaleb F. Punkte 193

Eine mögliche Lösung wäre die Überprüfung der Bilddaten width y height Eigenschaften, um festzustellen, ob sie gültig ist oder nicht.

0voto

Adam Lear Punkte 36637

Ja, die contentType gibt die jeweilige Dateierweiterung zurück. Der beste Weg, den ich finden kann, ist ein Blick auf die Bildeigenschaften :

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

0voto

bherto39 Punkte 1036

Wobei SelectImagePlaceholder ein Image Control ist =)

StorageFile-Datei;

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X