2015-04-29 4 views
0

Наше приложение сбой при импорте изображений более 8 megapixels на iPhone. Время от времени и высокая память.ошибка приложения при импорте более 8 мегапикселей Изображение для uiimageview

Кстати образы, которые мы пытаемся импортировать больше, чем 8 мегапикселей, а не то, что огромный слишком 4000 x 3000 (12 Мп) .Photos, сделанные с помощью камеры iPhone являются 3264 x 2448 (8 мегапикселей).

Вот наша ПАМЯТЬ ОТЧЕТ

при ввозе 8 Мп изображение

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 в backend и вывести сжатую версию. Это займет всего 23 МБ памяти.

Даже если вы хотите отредактировать изображение, просто визуализируйте эффект на сжатой версии. Когда пользователи завершат редактирование, вы обрабатываете все эффекты в backend (не отрисовываете исходную версию) и сохраняете исходную версию до пользовательской библиотека.

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

После загрузки изображения из пакета вы можете получить imageData.Set UIImage с NSData.Now вы можете получить размер изображения. –

+0

ручкаImage.size.width, рукояткаImage.size.height. :-) –

 Смежные вопросы

  • Нет связанных вопросов^_^