【问题标题】:UIImagePickerController run out of memory with camera sourceUIImagePickerController 用相机源耗尽内存
【发布时间】:2011-01-05 12:42:18
【问题描述】:

我在使用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 方法创建一个以这种方式初始化的新图片对象:

- (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 相当快,但是当我将图片保存在磁盘上时,程序变得很慢。

知道我做错了什么吗?

【问题讨论】:

    标签: ios uiimage uiimagepickercontroller disk


    【解决方案1】:

    我遇到了类似的问题。我绕过它的方法是在单独的线程中处理来自选取器的图像。我的问题是处理我的应用程序/UI 的主线程在尝试关闭选择器并处理图像时崩溃了:

    - (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];
    
    }
    

    【讨论】:

    • 这对我帮助很大。谢谢。我认为当设备处于“接近满”状态时会发生此错误。
    【解决方案2】:

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

    来自相机的原始图像的分辨率约为 1200x1400,这是一个很大的内存,如果您尝试从中制作图片会导致设备崩溃(它会耗尽内存)。

    我建议将图像大小调整为更小(原生 320x480)。

    【讨论】:

    • 我认为这不会解决我的问题。根据那篇帖子stackoverflow.com/questions/1282830/…,一旦将图像写入磁盘,它们就不会占用太多内存。不管怎样,谢谢你的回答,我会试试看的。
    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 2015-08-23
    • 2012-11-10
    • 2012-08-19
    • 2011-02-09
    • 2015-10-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多