user2534693
user2534693

Reputation:

Saving picture from app

I am trying to make my application open the camera app to take a save pictures.

from my application i am launching the camera application to take a picture with the following code:

-(IBAction)TakePhoto:(id)sender {

    picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    [picker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:picker animated:YES completion:NULL];
    [picker release];
    //save image??:
    //UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
}

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

    image = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self dismissViewControllerAnimated:YES completion:NULL];
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

    [self dismissViewControllerAnimated:YES completion:NULL];
}

My problem is that once the button is pressed, the camera comes out and allows me to take a picture. Once the picture is take, the image is shown and i have the option to "retake" or "use". My issue is that if i click "use" the image is not saved to the camera roll. Is there a possibility to save the image and eventually change the "use" button to say "save"?

Thank you for you help!

Upvotes: 2

Views: 295

Answers (2)

user2828120
user2828120

Reputation: 233

static NSDateFormatter* dateFormatter;    
- (NSString*) generateNameWithExtension: (NSString*) extension
{
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"yyyyMMddHHmmssSSS";
    });

    NSDate* now = [NSDate date];
    NSString* string = [dateFormatter stringFromDate:now];
    string = [NSString stringWithFormat:@"%@.%@",string,extension];
    return string;
}


- (NSString*) saveImage: (UIImage*) image WithExtension: (NSString*) extension
{
    extension = [extension lowercaseString];
    NSData* data;

    if ([extension isEqualToString:@"png"])
    {
        data = UIImagePNGRepresentation(image);
    }else if ([extension isEqualToString:@"jpg"]||[extension isEqualToString:@"jpeg"])
    {
        data = UIImageJPEGRepresentation(image, 1.0);
    }else{
        NSLog(@"Error save local image, Extension: (%@) is not recognized, use (PNG/JPG)",extension);
        return nil;
    }
    NSString* imageName = [self generateNameWithExtension:extension];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents = [paths objectAtIndex:0];
    NSString *finalPath = [documents stringByAppendingPathComponent:imageName];

    [data writeToFile:finalPath options:NSAtomicWrite error:nil];
    return finalPath;
}

This code save image in folder you app. You can later use it: [UIImage imageWithContentsOfFile:finalPath]

Upvotes: 1

Mick MacCallum
Mick MacCallum

Reputation: 130193

The photo isn't being saved because you never actually added the code to save the image to the didFinishPickingMediaWithInfo: delegate method. All you have to do is add the line that you commented out in TakePhoto: to this function and you will be able to save the photo to the camera roll. E.x:

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

    image = [info objectForKey:UIImagePickerControllerOriginalImage];

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);

    [self dismissViewControllerAnimated:YES completion:NULL];
}

Upvotes: 3

Related Questions