2014-03-05 46 views
0

我有一個集合視圖(UICollectionViewController的子類),我放置了一個名爲「拍照」的UIBarButtonItem。當我點擊酒吧按鈕項目我的相機打開&我拍照。在我的項目中,從相機「使用照片」之後,它將移動到裁剪視圖控制器,在從裁剪視圖中選擇圖像後裁剪圖像,圖像放置在我的收藏夾視圖中當前控制器。在裁剪視圖中,我有兩個按鈕使用和取消。我的問題是,當我採取奇怪的2,3或4我收到控制檯內存警告,然後應用程序崩潰與警報「應用程序終止,由於內存壓力」。我一直在使用這段代碼,當我使用UIImagePickerControllerEditedImage時,如果我使用UIImagePickerControllerOriginalImage,則會出現內存問題。uiimagepickercontrolleroriginalimage記憶waring

我的問題是提供良好的圖像質量,這UIImagePickerControllerOriginalImage提供了良好的質量,比UIImagePickerControllerEditedImage。我必須擺脫這種記憶問題的,所以我用這條線[self dismissViewControllerAnimated:YES completion:NULL];但我不能夠清除內存警告。

- (IBAction)TakeaPhoto:(id)sender { 

[[UIApplication sharedApplication]setStatusBarHidden:FALSE withAnimation:NO]; 
    gallery=0; 
picker1 = [[UIImagePickerController alloc] init]; 
    picker1.delegate = self; 
    self.resizeableCropArea =YES; 
    self.cropSize=CGSizeMake(296, 350); 
     picker1.sourceType = UIImagePickerControllerSourceTypeCamera; 
    [self presentViewController:picker1 animated:YES completion:NULL]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    UIImage *image = [info objectForKey: 
            UIImagePickerControllerOriginalImage]; 

    image_cap = [self imageTemp:image scaledToSize:CGSizeMake(320, 370)]; 

    dataTemp = UIImageJPEGRepresentation(image,0.0); 

    CropViewController *cropController = [[CropViewController alloc] init]; 

    cropController.sourceImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 


    Original_img = UIImageJPEGRepresentation(cropController.sourceImage,0.0); 

    [original_image addObject:[UIImage imageWithData:Original_img]]; 

    NSLog(@"source image=%@",cropController.sourceImage); 

    cropController.resizeableCropArea = self.resizeableCropArea; 

    cropController.cropSize = self.cropSize; 

    cropController.delegate = self; 

    Cancel_Image= cropController.sourceImage; 

    [self dismissViewControllerAnimated:YES completion:NULL]; 

    [self.navigationController 
    pushViewController:cropController animated:YES]; 
} 

回答

0

也許你應該壓縮你的JPEG圖像。例如,如果你需要,你的圖像尺寸大於70KB少,你可以使用此代碼:

float compressionRate = 0.90; // Initial compression rate 
    float maxCompressionRate = 0.10; // Max compression rate 

    NSData *data = UIImageJPEGRepresentation(outputImage, compressionRate); 
    // Our limit of size is MAX_UPLOAD_SIZE (70000) and compressionRate is 0.03f 
    while ([data length] > MAX_UPLOAD_SIZE && compressionRate >= maxCompressionRate) { 
     compressionRate -= 0.03; 
     data = UIImageJPEGRepresentation(outputImage, compressionRate); 
    } 

注:與你以字節爲單位所需的大小,你可以編輯MAX_UPLOAD_SIZE。