Проблемы с загрузкой и сохранением изображений с камеры и с камеры.Что я делаю неправильно? - PullRequest
7 голосов
/ 12 декабря 2011

Я создаю приложение, в котором вы можете сделать снимки или выбрать изображение из рулона камеры и сохранить их в приложении для отображения в виде таблицы и подробного вида.Проблема в том, что когда я делаю изображение из приложения и сохраняю его, просмотр таблиц и просмотр деталей становятся очень медленными, как будто приложение зависает.Я также получаю эту ошибку ": CGAffineTransformInvert: особая матрица."Когда я загружаю изображение с камеры-ролика, которое не было снято из моего приложения, проблем не возникает, и приложение работает очень мрачно.

Этот код используется при открытии камеры и рулона камеры:

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex{
if (buttonIndex == actionSheet.cancelButtonIndex) {
    return;
}

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;

switch (buttonIndex) {
    case 0:
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
            picker.sourceType = UIImagePickerControllerSourceTypeCamera;
        }
        break;
    case 1:
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
            picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        }
        break;
}

[self presentModalViewController:picker animated:YES];  
}

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

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
UIImage *mijnImage;
if (CFStringCompare((__bridge_retained CFStringRef)mediaType, kUTTypeImage, 0)==kCFCompareEqualTo) {
    mijnImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
    mijnPlaatje_.image = mijnImage;
    UIImageWriteToSavedPhotosAlbum(mijnImage, nil, nil, nil);

}

 [picker dismissModalViewControllerAnimated:YES]; 

}

И здесь я сохраняю изображение внутримое приложение:

-(IBAction)save:(id)sender{
drankjes.plaatje = [mijnPlaatje_ image];
[self dismissModalViewControllerAnimated:YES];

}

Что я делаю не так?

Ответы [ 5 ]

1 голос
/ 10 марта 2012

Вам необходимо использовать:

UIImageWriteToSavedPhotosAlbum(image, self, @selector(video:didFinishSavingWithError:contextInfo), nil)

и внедрить:

- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
    NSLog(@"Saving image");
    if(error != nil) {
        NSLog(@"Error saving: %@",[error localizedDescription]);
    }
}

Как говорит Jensen2K, didFinishSavingWithError вызывается, даже если ошибки нет, поэтому вы можете использовать ее, чтобы сообщить, когда сохранение завершилось.

0 голосов
/ 10 января 2012

Вам нужно что-то реализовать

-(IBAction) pickphoto
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    {  
        UIImagePickerController *picker= [[UIImagePickerController alloc]init];
        picker.delegate = self;
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [yourView presentModalViewController:picker animated:YES];
        picker.videoQuality = UIImagePickerControllerQualityTypeHigh;
        picker.allowsEditing = NO;
        [picker release];
    }
}


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage : (UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
    [picker dismissModalViewControllerAnimated:YES];
    myImage.image=image;
}
0 голосов
/ 12 декабря 2011

Для сохранения попробуйте это в вашем приложении didFinishLaunchingWithOptions метод:

NSString *path = [[NSBundle mainBundle]pathForResource:@"" ofType:@""];
UISaveVideoAtPathToSavedPhotosAlbum(path, self, @selector(video:didFinishSavingWithError:contextInfo), nil);
0 голосов
/ 02 января 2012

Прежде всего попробуйте сохранить ваше изображение, щелкнутое с камеры где-нибудь как NSData, а затем получить доступ к изображению в форме NSData, преобразовать его в UIImage и отобразить в imageView.

Например, вы можете использовать каталог документов для созданияplist, где вы можете сохранить изображение как NSData в методе -

- (void) imagePickerController: (UIImagePickerController *) средство выбора didFinishPickingMediaWithInfo: (NSDictionary *) info {

}

И при сохранении изображения в используемом вами методе - - (IBAction) save: (id) отправитель {}

вы можете получить доступ к тому же изображению из списка в каталоге документов.NSData как UIImage и отображать его на imageView. Я уверен, что никакая ошибка не будет сохранена.

Эта ошибка ": CGAffineTransformInvert: особая матрица".происходит из-за свойства ориентации изображения для изображения. При сохранении изображения в качестве NSData сохраняется свойство изображения. И вы получаете изображение без ошибок.

0 голосов
/ 12 декабря 2011

Попробуйте добавить этот делегат-метод, чтобы увидеть, что это за ошибка:

- (void)image:(UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
    NSLog(@"Saving image");
    if(error != nil) {
        NSLog(@"Error saving: %@",[error localizedDescription]);
    }
}
...