2015-04-29 69 views
0

我們的應用程序崩潰導入圖像大於8 megapixelsiPhone。有時內存使用率也很高。應用程序崩潰導入超過800萬像素圖像到uiimageview

通過,我們要導入的方式圖像大於8百萬像素,而不是在使用iPhone相機拍攝的過於龐大4000 x 3000(12萬像素).Photos是3264 x 2448(8百萬像素)。

這裏是我們MEMORY REPORT

進口800萬像素的圖像時

enter image description here


進口12萬像素的圖像時,在存儲器

enter image description here

巨大的差異用法。任何人都知道爲什麼有很大的內存使用差異和解決方案?

(我們將使用圖像進行編輯,過濾,處理等)。

這裏是我們的代碼

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *selectedImage=[info objectForKey:UIImagePickerControllerOriginalImage]; 

    //SCALING UIIMAGE 

    UIImage *scaledImage=[[UIImage alloc]init]; 
    if ((selectedImage.size.width>3264) && (selectedImage.size.height>2448)) 
    { 
     UIGraphicsBeginImageContextWithOptions(CGSizeMake(selectedImage.size.width/2, selectedImage.size.height/2), NO, 0.0); 
     NSLog(@" HEIGHT %f",selectedImage.size.height); 
     NSLog(@" WIDTH %f",selectedImage.size.width); 

     [selectedImage drawInRect:CGRectMake(0, 0,selectedImage.size.width/2 ,selectedImage.size.height/2)]; 
     scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 

     UIGraphicsEndImageContext(); 

     NSLog(@" HEIGHT %f",scaledImage.size.height); 
     NSLog(@" WIDTH %f",scaledImage.size.width); 


     VisualEffectImageVIew.image=scaledImage; 
     BackgroundImageView.image=scaledImage; 
     ForegroundImageView.image=scaledImage; 
    } 
    else 
    { 
    VisualEffectImageVIew.image=selectedImage; 
    BackgroundImageView.image=selectedImage; 
    ForegroundImageView.image=selectedImage; 
    } 
    if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone) 
    { 
     [picker dismissViewControllerAnimated:YES completion:nil]; 
    } 
    else 
    { 


     [popoverController dismissPopoverAnimated:YES]; 

     [self popoverControllerDidDismissPopover:popoverController]; 
    } 

} 

回答

0

_MGL9114.jpg是一個圖像文件。

_MGL9114大小爲3744px×5616px

如果我將此文件導入到我的iOS項目,並使其在UIView.It將採取108MB memory.Because的iOS會使UIImage的實時,如果您的圖像質量高,它會使用高內存來緩存圖像數據。

如果你想減少它,你應該在後端加載UIImage並輸出一個壓縮版本。它只需要23MB的內存。

即使您要編輯圖像,只需在壓縮版本上渲染效果。當用戶完成編輯時,您將在後端處理所有效果(不渲染原始版本)並將原始版本保存到用戶的圖書館。

NSString * imageBundle = [[NSBundle mainBundle] pathForResource:@"_MGL9114" ofType:@"jpg"]; 
NSData * imageData = [[NSData alloc]initWithContentsOfFile:imageBundle]; 
UIImage * handleImage = [UIImage imageWithData:imageData]; 

UIGraphicsBeginImageContextWithOptions(CGSizeMake(handleImage.size.width/10, handleImage.size.height/10), NO, 0.0); 
[handleImage drawInRect:CGRectMake(0, 0,handleImage.size.width/10 ,handleImage.size.height/10)]; 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 


UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, handleImage.size.width/10, handleImage.size.height/10)]; 
[imageView setImage:newImage]; 

[self.view addSubview:imageView]; 
+0

調整所有圖像的大小將是問題,因爲有些可能會非常小,在這種情況下如何檢查圖像分辨率並調整它們的大小,以便它們使用較少的內存? – USERX2DX

+0

從bundle中加載圖片後,您可以使用NSData獲取imageData.Set UIImage。現在您可以獲取圖片的大小。 –

+0

handleImage.size.width,handleImage.size.height。 :-) –

相關問題