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.

11
demandé sur Forgot 2014-04-24 18:41:44

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];
20
répondu Josh Freeman 2017-03-29 14:29:30

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:.

4
répondu Rich 2014-12-26 18:56:30

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);
-1
répondu Heider Sati 2016-03-29 21:40:48