NSImage to NSData, then to UIImage
je crée une liste à partir de mon application OSX qui contient quelques images. J'écris l'image par :
[NSKeyedArchiver archivedDataWithRootObject:self.someImage]
alors j'utilise ce fichier plist comme modèle pour l'application iOS, mais ici Je ne peux pas convertir le fichier en UIImage ni NSImage(comme C'est seulement pour OSX).
je reçois cette erreur:
* fin de l'application en raison d'une exception non confirmée 'NSInvalidUnarchiveOperationException', raison:'* - [NSKeyedUnarchiver decodeObjectForKey:]: ne peut pas décoder un objet de la classe (NSImage)'
s'il vous Plaît me suggérer un moyen pour effectuer la ci-dessus.
3 réponses
OS X:
Au lieu d'utiliser NSKeyedArchiver pour convertir un NSImageNSData, utilisez NSImageTIFFRepresentation méthode:
NSData *imageData = [self.someImage TIFFRepresentation];
// save imageData to file
iOS:
Lire les données d'image du fichier, puis le convertir en UIImage en utilisant UIImage +imageWithData: pratique constructeur:
NSData *imageData = ...; // load imageData from file
UIImage *image = [UIImage imageWithData: imageData];
vous devez créer un NSBitmapImageRep et enregistrer, puis de lire le NSDataUIImage+[UIImage imageWithData:]:
d'Abord dans OS X, enregistrer les données:
NSString *filepath;
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath];
NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil];
// Save the data
vous pouvez aussi utiliser imageRepWithData: si vous avez NSData de l'image déjà - ci vous permettra de charger à partir d'un fichier (comme vous pouvez NSImage).
puis dans iOS:
NSData *data; // Load from a file
UIImage *image = [UIImage imageWithData:data];
Voir ici pour les autres touches pour la dictionnaire representationUsingType:properties:.
Vous pouvez convertir un NSImage en NSData en utilisant l'API intégrée d'apple comme suit:
UIImage *MyImage = [UIImage imageNamed:@"WhateverDir/MyImage.png"];
NSData *MyImageData = UIImagePNGRepresentation(MyImage);