Créer UiImage de NSData
Voici le code que j'ai copié (à partir de ce site) et modifié que légèrement depuis le premier code ne compile pas. Je veux manipuler le tableau d'octets pour la détection des bords et, éventuellement, de simples changements de couleurs, mais d'abord je voulais obtenir le code de base de travail. Actuellement, le système compile et s'exécute. Il affiche un mal dessinée d'éléphant sur l'écran. Quand je touche l'image, il disparaît. Parcourant le montre le résultat de imageWithData comme 0x0. J'ai essayé avec un png et bmp et les mêmes résultats
Des indices à ce que je fais de 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 ];
}
Vous devez vous connecter pour publier un commentaire.
imageWithData: ne pas prendre de données arbitraires et l'interpréter comme une RGBA non compressé de la texture. Il prend de données qui contient les octets d'une image reconnue format (comme JPG, PNG ou TIFF), analyse les succulentes et décompresse les images de façon appropriée.
Afin de faire ce que vous voulez, vous devez créer un CGContext qui est configuré de manière appropriée (ligne octets, format de pixel, etc), soit à l'aide de la mémoire que vous avez déjà alloués comme support de stockage, ou en demandant pour son stockage et la copie de votre octets en elle. Une fois que vous faites cela, vous pouvez utiliser toutes les CGContext fonctionnalités connexes, y compris la possibilité de créer une UIImage de ce contexte.