1

Я использую пример кода Apple GLCameraRipple в моем проекте, и мне было интересно, есть ли способ сделать снимок/видео? Проект можно найти по адресу https://developer.apple.com/library/ios/samplecode/GLCameraRipple/Introduction/Intro.htmlКак сохранить изображение с помощью AVCaptureDevice

+0

проверить эту ссылку http://www.musicalgeometry.com/?p=1273 –

+0

вам нужно будет запустить код на устройстве, чтобы иметь доступ к ним, это не произойдет из симулятора – aug2uag

ответ

1

Прежде всего, убедитесь, что вы включили инфраструктуру AssetLibrary, потому что нам нужно, чтобы получить доступ к библиотеке фотографий. Предполагая, что вы правильно настроили захват AVCaptureSession, AVCaptureDevice и AVCaptureStillImageOutput (stillImage), теперь вы можете создать кнопку или просто вызвать функцию ниже, чтобы сохранить изображение.

-(void)captureMultipleTimes 
{ 
AVCaptureConnection *connection = [stillImage connectionWithMediaType:AVMediaTypeVideo]; 

typedef void(^MyBufBlock)(CMSampleBufferRef, NSError*); 

MyBufBlock h = ^(CMSampleBufferRef buf, NSError *err){ 
    NSData *data = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:buf]; 
    [self setToSaveImage:[UIImage imageWithData:data]]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     if(saveLabel == NULL){ 
      [self setSaveLabel:[[UILabel alloc] initWithFrame:CGRectMake(0,self.view.bounds.size.height/2, self.view.bounds.size.width, 50)]]; 
      [saveLabel setText:@"Saving.."]; 
      [saveLabel setTextColor:[captureBt titleColorForState:UIControlStateNormal]]; 
      [self.view addSubview:saveLabel]; 
     } else 
      saveLabel.hidden = NO; 

     UIImageWriteToSavedPhotosAlbum(toSaveImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
    }); 
}; 
[stillImage captureStillImageAsynchronouslyFromConnection:connection completionHandler:h]; 
} 

Вы также должны реализовать изображение: didFinishSavingWithError: contextInfo: метод как функцию завершения сохранения изображения. Одним из примеров является следующим:

-(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 
{ 
if(error != NULL){ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"Image could not be saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 
else{ 
    [saveLabel setHidden:YES]; 
} 
} 

функции выше будет отображаться «Saving ..» ярлык на экране, как только вы вызываете функцию captureMultipleTimes. Это просто означает, что в настоящее время он сохраняет видеовход как изображение и сохраняет его в фото lib. Как только он закончит сохранение, метка сохранения будет скрыта от экрана. Надеюсь это поможет!

Смежные вопросы