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 NSImage
NSData
, utilisez NSImage
TIFFRepresentation
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 NSData
UIImage
+[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);