Je suis en train de récupérer les données d'image d'un UIImage, modifier et créer une nouvelle UIImage de celui-ci. Pour commencer, j'ai essayé de copier les données sans aucune modification pour obtenir les bases, mais cela échoue (UIImage +imageWithData:
renvoie zéro). Quelqu'un peut-il voir pourquoi cela ne fonctionnerait pas?Création d'un UIImage d'un autre UIImage utilisant imageWithData renvoie 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];
Note:
J'ai aussi essayé d'utiliser:
UInt8 * data = CFDataGetBytePtr (dataref);
et juste de canaliser directement dans NSData.
Même résultat.
pourquoi dataWithBytesNoCopy? – jsicary
dataWithBytesNoCopy a été utilisé car il a alloué lui-même le tampon en utilisant malloc. De cette façon, il aura accès à l'image tampon réelle de l'image2 pendant toute la durée de vie de cet objet. – Till