Ci-dessous est le code que j'ai copié (à partir de ce site) et modifié seulement légèrement puisque le code d'origine ne compilerait pas. Je veux manipuler le tableau d'octets pour la détection des contours et éventuellement de simples changements de couleurs, mais je voulais d'abord que le code de base fonctionne. Actuellement, le système compile et s'exécute. Il affiche un éléphant mal dessiné à l'écran. Quand je touche l'image, elle disparaît. Le passage montre le résultat de imageWithData comme 0x0. J'ai essayé ceci avec un png et un bmp et le même résultatCréer UiImage à partir de NSData
Des indices à ce que je fais mal?!
ImageViewDrawable est défini comme:
@interface ImageViewDrawable : UIImageView
// I am using the following code to initialize this ImageView
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ];
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// get and work on pixel data
NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage));
char* bytes =[pixelData bytes];
// Take away the red pixel, assuming 32-bit RGBA
for(int i = 0; i < [pixelData length]; i += 4) {
bytes[i] = bytes[i]; // red
bytes[i+1] = bytes[i+1]; // green
bytes[i+2] = bytes[i+2]; // blue
bytes[i+3] = bytes[i+3]; // alpha
}
// convert pixel back to uiiimage
NSData* newPixelData = [NSData dataWithBytes:bytes length:[pixelData length]];
char * bytes2 =[pixelData bytes];
UIImage * newImage = [UIImage imageWithData:newPixelData] ;
[self setImage: newImage ];
}
Donc, peu importe que les données que je nourris proviennent essentiellement d'un UIImage existant? –
Je vois mon problème. Cet ensemble imbriqué d'appels - CGDataProviderCopyData (CGImageGetDataProvider()) - obtient le fournisseur de données, puis copie juste les données. Ce qui signifie que je reçois juste les pixels et non le reste de la configuration de l'image originale. Je dois donc recréer une image en utilisant ces pixels et les informations CG que vous avez mentionnées. Merci encore pour votre aide –