web-dev-qa-db-ja.com

NSImageからNSData、次にUIImage

OSXアプリからいくつかの画像を含むplistを作成しています。私はによって画像を書いています:

[NSKeyedArchiver archivedDataWithRootObject:self.someImage]

次に、このplistファイルをiOSアプリのテンプレートとして使用していますが、ここではファイルをUIImageに変換できず、NSImageにも変換できません(これはOSX専用であるため)。

このエラーが発生します:

*キャッチされなかった例外 'NSInvalidUnarchiveOperationException'が原因でアプリを終了しています、理由: '*-[NSKeyedUnarchiver decodeObjectForKey:]:クラス(NSImage)のオブジェクトをデコードできません'

上記を実行する方法を教えてください。

12
Anoop Vaidya

OS X:
NSKeyedArchiverを使用してNSImageNSDataに変換する代わりに、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];
21
Josh Freeman

NSBitmapImageRepを作成して保存し、+[UIImage imageWithData:]を使用してNSDataからUIImageを読み取る必要があります。

まずOSXで、データを保存します。

NSString *filepath;
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath];

NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil];
// Save the data

すでに画像のNSDataがある場合は、 imageRepWithData: を使用することもできます-上記はファイルから画像をロードします(あなたができるように またNSImage)で行います。

次にiOSの場合:

NSData *data; // Load from a file
UIImage *image = [UIImage imageWithData:data];

representationUsingType:properties:の辞書で許可されているその他のキーについては、 ここ を参照してください。

4
Rich