//如果你正在閱讀本文,請看下面的評論,並認爲?? WTF ??這是因爲我編輯我原來的答案,而不是發佈兩個答案,希望事情會更乾淨。瞭解ALAssetsLibrary是iOS 4.x的一點很重要。
下面的代碼將執行資產庫URL,然後將UIImage製作爲縮略圖表示形式。雖然我直接使用資產庫url,但沒有理由認爲,爲了滿足imageURL
賦值,相同的代碼無法通過將字符串表示轉換爲NSURL開始。免責聲明:此代碼可能泄漏或更糟糕的,但它回答了原來的海報的問題,並希望有價值。
下面的代碼大量借鑑了t his Stack Overflow question,涵蓋了基本上相同的主題。除了這裏的代碼之外,我還包含了AssetsLibrary.framework和另一個問題中引用的ALAssetsLibrary typedefs。
整個技巧是你不能直接從資產庫中引用NSURL。我認爲(雖然我不知道)它是以某種方式引用數據存儲而不是文件,所以從URL返回的數據不是直的NSData,因此您不能以舊的方式使用它。
代碼中有一個名爲photo
的UIImageView。希望其他一切都很容易理解。
- (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];
}
如果你不想縮略圖,但又希望在整幅照片,你只是在AssetForURLResult塊中的代碼更改爲類似這樣:
ALAssetRepresentation *rep = [myasset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
我們可以留下exercize爲用戶。
祝你好運,希望這有助於爲你解決問題。
如果用戶從相機膠捲中刪除圖像,這不會是一個問題,我的視圖中的圖片將只是留空。這張照片對其餘的觀點來說不是必要的。 – viperacr99 2011-01-12 14:34:58
該圖片對其餘視圖來說不是必需的。我的目標是iOS 4.0及更高版本。爲了簡單起見,我們假設我想將全尺寸圖像放入UIImageView中。我如何才能做到這一點,如果我只有信息字典中的NSURL對象?到目前爲止我嘗試過的東西都沒有奏效,我想我錯過了一些明顯的東西。 – viperacr99 2011-01-12 14:42:21