2

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

知道我做错了什么吗?

4

2 回答 2

3

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

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

}
于 2010-01-15T15:49:06.563 回答
1

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

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

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

于 2010-01-15T14:31:39.793 回答