NSImage в NSData, затем в UIImage
Я создаю plist из моего приложения OSX, которое содержит некоторые изображения. Я пишу изображение:
[NSKeyedArchiver archivedDataWithRootObject:self.someImage]
Затем я использую этот файл plist в качестве шаблона для приложения iOS, но здесь я не могу преобразовать файл в UIImage
и ни к NSImage
(поскольку это только для OSX).
Я получаю эту ошибку:
* Завершение приложения из-за неотображенного исключения "NSInvalidUnarchiveOperationException", причина: "*- [NSKeyedUnarchiver decodeObjectForKey:]: не может декодировать объект класса (NSImage) '
Пожалуйста, предложите мне способ выполнить описанное выше.
Ответы
Ответ 1
OS X:
Вместо использования NSKeyedArchiver
для преобразования NSImage
в NSData
, используйте метод NSImage
TIFFRepresentation
:
NSData *imageData = [self.someImage TIFFRepresentation];
// save imageData to file
IOS:
Считайте данные изображения из файла, затем преобразуйте их в UIImage, используя UIImage +imageWithData:
удобный конструктор:
NSData *imageData = ...; // load imageData from file
UIImage *image = [UIImage imageWithData: imageData];
Ответ 2
Вам нужно создать NSBitmapImageRep
, а затем сохранить его, а затем прочитать NSData
до UIImage
с помощью +[UIImage imageWithData:]
:
Сначала в OS X сохраните данные:
NSString *filepath;
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath];
NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil];
// Save the data
Вы также можете использовать imageRepWithData:
, если у вас уже есть NSData
изображения - выше будет загружать его из файла (например, вы можете также делать с NSImage
).
Тогда в iOS:
NSData *data; // Load from a file
UIImage *image = [UIImage imageWithData:data];
Смотрите здесь для других разрешенных клавиш для словаря в representationUsingType:properties:
.
Ответ 3
Вы можете преобразовать NSImage в NSData с помощью встроенного API-интерфейса Apple следующим образом:
UIImage *MyImage = [UIImage imageNamed:@"WhateverDir/MyImage.png"];
NSData *MyImageData = UIImagePNGRepresentation(MyImage);