Ich bekomme EXEC_BAD_ACCESS Fehler in einem CGContextDrawImage-Aufruf und versuchen, es zurückzuverfolgen. Ich habe ein PNG-Image und eine UIImagePNGRepresentation o es gibt mir NSData-Instanz.Wie konvertiert man NSData in CGDataProviderRef auf iPhone SDK?
Ich muss dies in CGImageRef-Instanz konvertieren, damit ich die CGImageCreateWithPNGDataProvider-Methode mit diesem CGImageRef ausführen kann.
Ich habe versucht, zwei Möglichkeiten: 1) Um es zu werfen.
CGImageRef ref = (CGDataProvider) nsdata;
2) CGDataProviderCreateWithCFData (nsdata) ausführen;
Der erste Fall gibt ein leeres Bild zurück, obwohl der Befehl nicht fehlschlägt. Der Grund, warum ich den zweiten Fall ausprobiert habe, obwohl ich NSData und nicht CFData habe, ist, weil ich mich daran erinnere, beide zu lesen. Was auch immer der Grund sein mag, es scheitert daran.
Gibt es eine Möglichkeit, meine PNG NSData zu verwenden, um ein CGImage zu erstellen, das nicht beschädigt ist? Bitte helfen.
THanks
'image.CGImage' ist auf jeden Fall besser als' (CGImageRef) [(id) CGImageCreateWithPNGDataProvider ((CGDataProviderRef) [(id) CGDataProviderCreateWithNSData ((CFDataRef) UIImagePNGRepresentation (Bild)) Autofreigabe ], 0,0,0) Autorelease] ' –
Beachten Sie, dass UIKit nicht threadsicher ist, daher kann das Erstellen von 'UIImage'-Instanzen in Hintergrundthreads zu Problemen führen. In manchen Fällen ist es besser, direkt einen 'CGImageRef' zu erstellen. – cheeesus
@cheeesus, nach Apples Dokumentation (https://developer.apple.com/reference/uikit/uiimage) ist es sicher, UIImage-Instanzen in Hintergrundthreads zu erstellen: * "Die unveränderliche Natur von Bildobjekten bedeutet auch, dass sie es sind Sicheres Erstellen und Verwenden von beliebigen Threads. "* – Arda