Ich versuche, CGImageSourceCreateThumbnailAtIndex
zu verwenden, um eine skalierte Version eines Bildes effizient zu erstellen. Ich habe etwas vorhandenen Code, der dies mit Bildern von der Platte tut, und jetzt versuche ich, ein Bild zu verwenden, das von ALAssetsLibrary
kommt.
Hier ist mein Code:
%Vor% Das Problem ist, dass resizedImage
null ist und CGImageSourceGetCount(sourceRef)
0 zurückgibt. Der Datenprovider tut jedoch ziemlich viele Daten und die Daten scheinen gültig zu sein Bilddaten. Der ALAsset
kommt von einer iPhone 4S-Kamerarolle.
Was vermisse ich? Warum erstellt CGImageSourceCreateWithDataProvider()
eine Bildquelle mit 0 Bildern?
CGImageSource dient zum Deserialisieren von serialisierten Bildern, wie JPEGs, PNGs und so weiter.
CGImageGetDataProvider
gibt (den Anbieter von) die rohen Pixeldaten des Bildes zurück. Es gibt serialisierte Bytes in einem externen Format nicht zurück. CGImageSource hat keine Möglichkeit zu wissen, welches Pixelformat (Farbraum, Bit pro Komponente, Alpha-Layout usw.) in den Rohpixeldaten enthalten ist.
Sie könnten versuchen, die URL des Asset-Reps abzurufen und diese an CGImageSourceCreateWithURL
zu übergeben. Wenn das nicht funktioniert (z. B. keine Datei-URL), müssen Sie das Image über ein CGImageDestination ausführen und eine CGImageSource erstellen, wo immer Sie die Ausgabe platzieren.
(Die andere Sache, die wir versuchen sollten, wäre zu sehen, ob der filename
des Repräsentanten tatsächlich ein vollständiger Pfad ist, wie Cocoa den Begriff oft missbraucht. Aber Sie sollten sich wahrscheinlich nicht darauf verlassen.)
Eine Sache, die Sie ausprobieren könnten, ist die Methode CGImageWithOptions:
des Ressourcenvertreters% .
Die Dokumentation behauptet , dass:
Diese Methode gibt die größte, beste verfügbare Darstellung zurück, die in keiner Weise eingestellt ist.
Aber es steht auch über fullResolutionImage
, und ich bin mir nicht sicher, warum diese Klasse beide Methoden hätte, wenn sie beide dasselbe machen. Ich frage mich, ob es ein Copy-and-Paste-Fehler ist.
Probieren Sie CGImageWithOptions:
mit einer Reihe von Optionen zur Erstellung von Thumbnails aus und sehen Sie, was passiert.
Option # 3 wäre die fullScreenImage
des Repräsentanten. Je nachdem, welche Art von "Miniaturbild" Sie benötigen, ist es möglicherweise billiger und / oder einfacher, nur dieses zu verwenden, das nicht größer als (ungefähr) die Größe des Bildschirms des Geräts ist.
Tags und Links alassetslibrary core-graphics alasset