Estoy tratando de recuperar los datos de imagen de una uiimage, modificarla y crear una nueva uiimage a partir de ella. Para empezar, intenté simplemente copiar los datos sin ninguna modificación para obtener los conceptos básicos, pero eso falla (UIImage +imageWithData:
devuelve nada). ¿Alguien puede ver por qué esto no funcionaría?Creando un UIImage de otro UIImage usando imageWithData devuelve nil
// 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];
Nota:
También probé usando:
uint8 * = datos CFDataGetBytePtr (dataRef);
y solo conectando directamente a NSData.
Mismo resultado.
¿Por qué dataWithBytesNoCopy? – jsicary
se usó dataWithBytesNoCopy porque él mismo asignó el búfer utilizando malloc. De esta forma, tendrá acceso al búfer de imagen real de image2 durante toda la vida útil de ese objeto. – Till