2014-04-24 17 views
9

Tôi đang tạo một plist từ ứng dụng OSX có chứa một số hình ảnh. Tôi viết thư này hình ảnh bằng cách:NSImage to NSData, sau đó đến UIImage

[NSKeyedArchiver archivedDataWithRootObject:self.someImage] 

Sau đó, tôi đang sử dụng tập tin plist này làm mẫu cho ứng dụng iOS, nhưng ở đây tôi không thể chuyển đổi các tập tin để UIImage và không để NSImage (vì điều này chỉ dành cho OSX).

Tôi nhận được lỗi này:

* Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: '* -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (NSImage)'

Xin gợi ý cho tôi một cách để thực hiện việc trên.

Trả lời

16

OS X:
Thay vì sử dụng NSKeyedArchiver để chuyển đổi một NSImage-NSData, sử dụng NSImage 's TIFFRepresentation phương pháp:

NSData *imageData = [self.someImage TIFFRepresentation]; 
// save imageData to file 

iOS:
Đọc dữ liệu hình ảnh từ tập tin, sau đó chuyển đổi nó thành UIImage bằng cách sử dụng hàm tạo thuận tiện +imageWithData: của UIImage:

NSData *imageData = ...; // load imageData from file 
UIImage *image = [UIImage imageWithData: imageData]; 
+1

Tôi nghĩ bạn muốn 'TIFFRepresentation' ở đây –

+0

Rất tiếc , sửa chữa. Cảm ơn! –

3

Bạn cần phải tạo một NSBitmapImageRep và sau đó lưu rằng, sau đó đọc NSData-UIImage với +[UIImage imageWithData:]:

đầu tiên trong OS X, lưu dữ liệu:

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

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

Bạn cũng có thể sử dụng imageRepWithData: nếu bạn có NSData của hình ảnh đã được - ở trên sẽ tải nó từ một tập tin (như bạn có thể also làm với NSImage).

Sau đó, trong iOS:

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

Xem here cho các phím cho phép khác cho từ điển trong representationUsingType:properties:.

+1

UIImagePNGRepresentation() đang được sử dụng không đúng cách trong đoạn code trên: Chức năng là có nghĩa là để chuyển đổi một trường hợp UIImage vào một đối tượng NSData, không phải để chuyển đổi NSData thành UIImage. Xem: https://developer.apple.com/library/ios/documentation/uikit/reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/func/UIImagePNGRepresentation –

-1

Bạn có thể chuyển đổi một NSImage vào NSData bằng cách sử dụng táo built-in API như sau:

UIImage *MyImage = [UIImage imageNamed:@"WhateverDir/MyImage.png"]; 
NSData *MyImageData = UIImagePNGRepresentation(MyImage); 
+1

Bạn đang chuyển đổi UIImage tại đây (ví dụ: iOS) không phải là NSImage (tức là OS X) –

Các vấn đề liên quan