2013-03-04 144 views
1

我的應用程序可以拍攝照片或從相機膠捲中選擇它們,使用UIImagePicker我發送圖片到ViewController,然後用戶可以裁剪圖像。使用UIImageJPEGRepresentation加載和保存大圖像崩潰我的應用程序

最終結果是UITableView帶有名稱和縮略圖,每行都會顯示完整大小的圖片。縮略圖是不同比例的原始圖片。

這是我救我的照片裁剪後:

[UIImageJPEGRepresentation(_justNowImage.image, 0.1) writeToFile:jpgPath atomically:NO]; 

這是我怎麼打開它的縮略圖或全尺寸。

_imageInPocket.image = [UIImage imageWithContentsOfFile:jpgPath]; 

如果我裁剪小圖片一切正常,但我嘗試裁剪一個大圖片(超過2 MB)的應用程序會崩潰,也許杜內存不足。

我的項目使用ARC。我仍然需要以某種方式釋放內存中的圖像嗎? 我應該創建圖像的小版本並將它們用作縮略圖,而不是將所有原始圖片加載到UITableView中並將其比例尺更改爲適合Cell

+0

所以,你的代碼的工作原理,但你有一個問題大圖像?這是一個圖像還是一些大的圖像,你正在處理?我聽起來像一些他們。 – 2013-03-04 08:04:14

+0

使用ARC,您仍然負責正確管理您的對象,以便ARC可以發佈您不需要的內容。這意味着您應該將對象的引用設置爲nil。你仍然可以覆蓋(但不能調用)具有強關係的所有對象的dealloc方法,這樣你就可以對它們進行nillify。 – 2013-03-04 08:05:31

+0

如果我使用分辨率低於500x500的圖片,我的代碼效果很好。第二個我使用一個大圖片(iPhone 4輸出的大小)我的應用程序變慢,並在一兩次點擊後崩潰。 – Segev 2013-03-04 08:06:31

回答

1

也許你應該加載數據,並使用

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
NSURL *url = [NSURL URLWithString:@"Your URL"]; 
NSURLRequest *theRequest = [NSURLRequest 
    requestWithURL: url 
    cachePolicy: NSURLRequestUseProtocolCachePolicy 
    timeoutInterval: 60.0 
]; 

當您使用此方法,將其轉換爲圖像,你會得到包你的形象。 在此之後,你應該調用,並收集所有數據包

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[imageData appendData:data]; 
} 

在此之後,你需要將數據轉換爲圖像並關閉連接

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    UIImage *image = [UIImage imageWithData:imageData]; 
    imageView.image = image; 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
} 
相關問題