views:

570

answers:

2

Hi everyone. I got a big performance issue using UIImagePickerController and saving the image on disk. I can't figure out what I am doing wrong. Here is my code :

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

}

The addPicture methods create a new picture object that is initialized that way :

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

}

The UIImagePickerController is quite fast but the program becomes very slow when I save picture on the disk. Any idea on what I am doing wrong ??

PS: forgive my english I am french.

A: 

Your problem might be due to you taking the original image, you know the original image from camera has a resolution of around 1200x1400 or something like that, which is a lot of memory and will cause the d evice to crash if u try making a picture out of it (it will run out of memory), i would ugugest resizing the image to be smaller (the native 320x480)

Daniel
I don't think that will solve my problem. According to that post, http://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more, once images are written on the disk they don't take a lot of memory.Anyway thanks for your answer I will give it a try.
A: 

I had a similar issue. The way I got round it was to handle the image from the picker in a seperate thread. My problem was the main thread handling my app/UI was crashing out when trying to close the picker and handle the image:

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

}
mootymoots
Thank you so much !!!!That solution gave me amazing performance. I definitly love that forum and those members !