Как сделать снимок с камеры и сохранить в фотоальбоме программным способом? - PullRequest
9 голосов
/ 25 июля 2011

В приложениях для iPhone я хочу делать снимки с камеры и сохранять их в фотогалерее программным способом. Возможно ли это в iPhone Simulator? поэтому, пожалуйста, сообщите мне любую ссылку или материалы, которые у вас есть.

Заранее спасибо

Ответы [ 4 ]

18 голосов
/ 25 июля 2011

Для этой цели вы бы использовали uiimagepickercontroller.Прежде всего, импортируйте MobileCoreServices.framework.Затем поднимите камеру:

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        NSArray *media = [UIImagePickerController
                          availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera];

        if ([media containsObject:(NSString*)kUTTypeImage] == YES) {
            UIImagePickerController *picker = [[UIImagePickerController alloc] init];
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            //picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
            [picker setMediaTypes:[NSArray arrayWithObject:(NSString *)kUTTypeImage]];

            picker.delegate = self;
            [self presentModalViewController:picker animated:YES];
            //[picker release];

        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unsupported!"
                                                            message:@"Camera does not support photo capturing."
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
        }

    }
    else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unavailable!"
                                                        message:@"This device does not have a camera."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

Затем сохраните фотографию, применив uiimagepickercontrollerdelegate и функцию сохранения:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSLog(@"Media Info: %@", info);
    NSString *mediaType = [info valueForKey:UIImagePickerControllerMediaType];

    if([mediaType isEqualToString:(NSString*)kUTTypeImage]) {
        UIImage *photoTaken = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

        //Save Photo to library only if it wasnt already saved i.e. its just been taken
        if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
            UIImageWriteToSavedPhotosAlbum(photoTaken, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
        }


    }

    [picker dismissModalViewControllerAnimated:YES];
    [picker release];
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    UIAlertView *alert;
    //NSLog(@"Image:%@", image);
    if (error) {
        alert = [[UIAlertView alloc] initWithTitle:@"Error!"
                                           message:[error localizedDescription]
                                          delegate:nil
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissModalViewControllerAnimated:YES];
}

Дополнительная информация об изображении: didFinishSaving .... может бытьнайдено здесь

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html

Также посмотрите этот пост

https://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more

5 голосов
/ 25 июля 2011

это не возможно в симуляторе. Вы должны использовать устройство.

2 голосов
/ 25 июля 2011

Надеюсь, вы понимаете, что на симуляторе нет камеры ..... Так что, думаю, это невозможно. Вы определенно можете использовать устройство .... Вы можете использовать UIImagePickerController для захвата изображений.

0 голосов
/ 26 апреля 2014

Для программной съемки необходимо 3 условия:

  1. Устройство должно иметь проверку камеры по

     if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    
  2. Элементы управления камерой должны быть скрыты (средство выбора - UIImagePickerController)

    picker.showsCameraControls = NO;
    
  3. использовать takePicture из UIImagePickerController

    [Picker TakePicture];

Примечание: из-за того, что в течение нескольких минут меня это беспокоило, метод takePicture также отклоняет представление.

Также выложил более полный ответ здесь Другой ответ стека

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...