私は自分のプロジェクトで Apple の GLCameraRipple サンプル コードを使用していますが、写真やビデオを撮る方法があるかどうか疑問に思っていましたか? プロジェクトはhttps://developer.apple.com/library/ios/samplecode/GLCameraRipple/Introduction/Intro.htmlにあります。
質問する
581 次
1 に答える
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];
}
また、画像保存の完了関数としてimage: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];
}
}
上記の関数は、captureMultipleTimes 関数をトリガーすると、画面に「保存中..」ラベルを表示します。これは単に、現在ビデオ入力を画像として保存し、それをフォト ライブラリに保存していることを意味します。保存が完了すると、保存ラベルは画面から非表示になります。お役に立てれば!
于 2013-10-30T01:27:33.283 に答える