// Nếu bạn đang đọc và xem các nhận xét bên dưới và suy nghĩ? WTF ?? đó là vì tôi đang chỉnh sửa Trả lời ban đầu của mình thay vì đăng hai câu trả lời với hy vọng mọi thứ sẽ sạch hơn. Điều quan trọng là phải biết rằng ALAssetsLibrary là một điều iOS 4.x.
Mã bên dưới sẽ hoạt động để lấy URL của thư viện nội dung và sau đó tạo UII ra khỏi đại diện hình thu nhỏ. Mặc dù tôi sử dụng trực tiếp url thư viện nội dung nhưng không có lý do gì mà mã tương tự này không thể bắt đầu bằng cách chuyển đổi biểu diễn chuỗi thành NSURL để thỏa mãn việc gán imageURL
. Disclaimer: mã này có thể bị rò rỉ hoặc một cái gì đó tồi tệ hơn, nhưng nó trả lời câu hỏi của poster ban đầu và hy vọng giá trị.
Mã dưới đây vay nặng nề trên t his Stack Overflow question bao gồm về cơ bản cùng chủ đề này. Ngoài các mã ở đây, tôi đã bao gồm AssetsLibrary.framework và ALAssetsLibrary typedefs được tham chiếu trong câu hỏi khác.
Toàn bộ mẹo là bạn không thể tham chiếu NSURL trực tiếp từ thư viện tài sản. Tôi nghĩ rằng (mặc dù tôi không biết) rằng nó bằng cách nào đó tham khảo một kho dữ liệu thay vì một tập tin để dữ liệu trả về từ URL không phải là NSData thẳng vì vậy bạn không thể sử dụng nó theo cách cũ.
Có UIImageView trong mã được gọi là photo
. Hy vọng rằng tất cả mọi thứ khác là dễ dàng để tìm ra.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
NSLog(@"%@",imageURL);
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
CGImageRef iref = [myasset thumbnail];
if (iref) {
UIImage *theThumbnail = [UIImage imageWithCGImage:iref];
[[self photo] setImage:theThumbnail];
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
};
if(imageURL)
{
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:imageURL
resultBlock:resultblock
failureBlock:failureblock];
}
[self dismissModalViewControllerAnimated:YES];
}
Nếu bạn không muốn hình thu nhỏ nhưng làm muốn ảnh đầy đủ, bạn sẽ chỉ cần thay đổi mã trong khối AssetForURLResult một cái gì đó như thế này:
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
Chúng ta có thể rời khỏi exercize rằng cho người dùng.
Chúc may mắn, hy vọng điều này sẽ giúp mọi thứ rõ ràng cho bạn.
Nếu người dùng xóa hình ảnh khỏi cuộn camera, sẽ không có vấn đề gì, ảnh trong chế độ xem của tôi sẽ chỉ để trống. Hình ảnh không cần thiết cho phần còn lại của chế độ xem. – viperacr99
Hình ảnh không cần thiết cho phần còn lại của chế độ xem. Tôi đang nhắm mục tiêu IOS 4.0 trở lên. Để làm cho nó dễ dàng, hãy nói rằng tôi muốn đặt hình ảnh kích thước đầy đủ vào một UIImageView. Làm thế nào tôi có thể làm điều đó nếu tôi chỉ có đối tượng NSURL từ từ điển thông tin? Những điều tôi đã cố gắng cho đến nay đã không làm việc, tôi cho rằng tôi đang thiếu một cái gì đó hiển nhiên. – viperacr99
Đối tượng NSURL sẽ trỏ đến hình ảnh và sau đó bạn có thể tải xuống. Vì bạn đang nhắm mục tiêu IOS 4.0, bạn có tùy chọn truy cập Thư viện nội dung. Có một hướng dẫn tại blog iCode (http://icodeblog.com/2010/07/08/asset-libraries-and-blocks-in-ios-4/) nhưng có lẽ bạn đã thấy nó? Khi bạn có tài sản trong tay, bạn có thể sử dụng phương thức valueForPropery và lấy ALAssetPropertyURLs là một từ điển chứa URL của tệp. – Walter