Сделайте снимок с iPhone, а затем используйте его!

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

У меня есть приложение, которое делает снимок и помещает его в виде изображения. Просто. Код выглядит следующим образом:

 - (void)takePhoto:(id)sender
{
    // Lazily allocate image picker controller
    if (!imagePickerController) {
        imagePickerController = [[UIImagePickerController alloc] init];

        // If our device has a camera, we want to take a picture, otherwise, we just pick from
        // photo library
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        {
            [imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
        }else
        {
            [imagePickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        }

        // image picker needs a delegate so we can respond to its messages
        [imagePickerController setDelegate:self];
    }
    // Place image picker on the screen
    [self presentModalViewController:imagePickerController animated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)];

    [imageView setImage:image];

    [self dismissModalViewControllerAnimated:YES];
}
  

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

Нужно ли мне сохранять его на фотопленку, прежде чем использовать в режиме просмотра изображений?

Комментарии:

1. Установите точку останова, чтобы проверить, является ли изображение нулевым, когда оно передается в ImageHelpers

2. Нет, похоже, это не равно нулю. Я могу сохранить фотографию на фотопленку, используя: UIImageWriteToSavedPhotosAlbum(), чтобы изображение существовало в переменной. Кажется, что он теряется, когда я присваиваю его ImageView.

3. Думаю, мне нужно где-то сохранить его, прежде чем отправлять в my view. Какой подход был бы здесь наилучшим?

Ответ №1:

ОК. Решение нашел сам.

Сначала мне пришлось отключить модальный просмотр…

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

    [self dismissModalViewControllerAnimated:YES]; //Do this first!!
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    image = [ImageHelpers imageWithImage:image scaledToSize:CGSizeMake(480, 640)];

    [imageView setImage:image];  
}
  

Ответ №2:

Почему вы не можете просто использовать этот код?

 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
    [imageView setImage:image];
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];
}
  

Комментарии:

1. Ну, в iOS 3 это устарело… developer.apple.com/library/ios/#documentation/UIKit/Reference /… :

2. ОК. Я все еще не хочу использовать устаревшую функцию 😉