UIImagePickerController用相机源运行内存不足

使用UIImagePickerController ,我得到了一个很大的性能问题,并保存在磁盘上的图像。 我无法弄清楚我做错了什么。 这是我的代码:

 - (void)imagePickerController:(UIImagePickerController *)pick didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; iPixAppDelegate *delegate = (iPixAppDelegate *)[[UIApplication sharedApplication] delegate]; [delegate addPicture:imageData]; } 

addPicture方法创build一个新的图片对象,这种方式被初始化:

 - (Picture*) initPicture:(NSData*)dat inFolder:(NSString*)pat { self.data = dat; NSDate *d = [NSDate date]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-mm-dd hh-mm-ss"]; self.name = [[formatter stringFromDate:d] stringByAppendingString:@".png"]; //The name by default of a picture is the date it has been taken [formatter release]; self.path = [pat stringByAppendingPathComponent:self.name]; if(![self fileExistsAtPath:self.path]){ [self.data writeToFile:self.path atomically:YES]; } return self; } 

UIImagePickerController速度相当快,但是当我将图片保存在磁盘上时,程序变得非常慢。

任何想法我做错了什么?

我有一个类似的问题。 我得到的方式是在一个单独的线程处理拾取器的图像。 我的问题是主线程处理我的应用程序/用户界面崩溃时试图closures选取器和处理图像:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { [[picker parentViewController] dismissModalViewControllerAnimated:YES]; NSLog(@"picker did finish"); [NSThread detachNewThreadSelector:@selector(useImage:) toTarget:self withObject:image]; } 

您的问题可能是由于您拍摄了原始图像。

来自相机的原始图像的分辨率为1200×1400左右,这是一个很大的内存,如果您尝试拍摄一张照片(内存不足),将导致设备崩溃。

我会build议调整图像更小(原生320×480)。

Interesting Posts