Ich versuche, die Bilddaten von einem uiimage abrufen, ändern, und erstellen Sie ein neues uiimage von ihm. Um zu beginnen, habe ich versucht, nur die Daten ohne irgendeine Änderung zu kopieren, um die Grundlagen unten zu erhalten - aber das schlägt fehl (UIImage +imageWithData:
gibt nil zurück). Kann jemand sehen, warum das nicht funktionieren würde?Erstellen eines UIImage aus einem anderen UIImage mit imageWithData gibt null
// I've confirmed that the follow line works
UIImage *image = [UIImage imageNamed:@"image_foo.png"];
// Get a reference to the data, appears to work
CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider([image CGImage]));
// Get the length of memory to allocate, seems to work (e.g. 190000)
int length = CFDataGetLength(dataRef) * sizeof(UInt8);
UInt8 * buff = malloc(length);
// Again, appears to work
CFDataGetBytes(dataRef, CFRangeMake(0,length),buff);
// Again, appears to work
NSData * newData = [NSData dataWithBytesNoCopy:buff length:length];
// This fails by returning nil
UIImage *image2 = [UIImage imageWithData:newData];
Hinweis:
Ich habe auch versucht mit:
UInt8 * data = CFDataGetBytePtr (dataRef);
und einfach nur in NSData.
Gleiches Ergebnis.
Warum DataWithBytesNoCopy? – jsicary
dataWithBytesNoCopy wurde verwendet, da er den Puffer selbst mithilfe von malloc zugewiesen hat. Auf diese Weise erhält er während der gesamten Lebensdauer dieses Objekts Zugriff auf den eigentlichen Bildpuffer von image2. – Till