【问题标题】:How to take picture from Camera & saved in Photo Gallery by programmatically?如何以编程方式从相机拍照并保存在照片库中?
【发布时间】:2011-07-25 06:53:08
【问题描述】:

在 iPhone 应用程序中,我想以编程方式从相机拍照并保存到照片库中。 iPhone模拟器可以吗? 所以请告诉我你有任何链接或材料。

提前致谢

【问题讨论】:

  • 在模拟器中无法从相机拍照,您必须使用设备测试您的代码。

标签: iphone objective-c cocoa-touch


【解决方案1】:

您将为此目的使用 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

【讨论】:

  • 这对我来说是正确的..我捕获的图像已成功保存到设备库,但我想知道是否可以将图像保存在特定文件夹(如新专辑)中画廊?谢谢
【解决方案2】:

在模拟器中是不可能的。你必须使用设备。

【讨论】:

    【解决方案3】:

    我希望你意识到模拟器没有摄像头.....所以我想那是不可能的。您绝对可以使用设备....您可以使用UIImagePickerController 来捕获图像。

    【讨论】:

      【解决方案4】:

      以编程方式拍照需要 3 个先决条件:

      1. 设备需要通过摄像头检查

         if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        
      2. 相机控件需要隐藏(picker是一个UIImagePickerController)

        picker.showsCameraControls = NO;
        
      3. 使用 UIImagePickerController 中的 takePicture

        [选择器拍照];

      旁注,因为它确实困扰了我几分钟,takePicture 方法也会关闭视图。

      还在这里发布了更完整的答案Other Stack answer

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 2011-09-30
        相关资源
        最近更新 更多