인스턴트 메신저로 간단한 코드를 테스트했습니다. 그것은 AVFoundation을 사용했습니다. 내가 그것을 달릴 때. 사진을 찍어 앨범에 저장할 수 있습니다. 하지만 두 번 실행하면 효과가 없습니다. 나는 그것을 재건하고 다시 일했다. 그러나 단지 한 번. 왜 누군가가 (미안 해요. 내가 ....> < 영어 잘 모르겠어요)? 말해 줄 수: 내 앱이 처음으로 작업 한 이유는 무엇입니까?
//
// main.m
// test
//
// Created by John Suu on 1/22/14.
// Copyright (c) 2014 John Suu. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "AVFoundation/AVFoundation.h"
AVCaptureSession *session;
AVCaptureDevice *videoDevice;
AVCaptureDeviceInput *videoInput;
AVCaptureStillImageOutput *stillImageOutput;
void settings(){
NSError *error = nil;
// 入力と出力からキャプチャーセッションを作成
session = [[AVCaptureSession alloc] init];
// 正面に配置されているカメラを取得
AVCaptureDevice *camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// カメラからの入力を作成し、セッションに追加
videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:&error];
[session addInput:videoInput];
// 画像への出力を作成し、セッションに追加
stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
[session addOutput:stillImageOutput];
// キャプチャーセッションから入力のプレビュー表示を作成
// セッション開始
[session startRunning];
}
void takePicture(){
AVCaptureConnection *videoConnection = [stillImageOutput connectionWithMediaType:AVMediaTypeVideo];
/*if (videoConnection == nil) {
return;
}*/
// ビデオ入力から画像を非同期で取得。ブロックで定義されている処理が呼び出され、画像データを引数から取得する
[stillImageOutput
captureStillImageAsynchronouslyFromConnection:videoConnection
completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (imageDataSampleBuffer == NULL) {
return;
}
// 入力された画像データからJPEGフォーマットとしてデータを取得
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
// JPEGデータからUIImageを作成
//[imageData writeToFile:@"/var/mobile" atomically:NO];
UIImage *image = [[UIImage alloc] initWithData:imageData];
// アルバムに画像を保存
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}];
}
int main(int argc, char * argv[])
{
settings();
takePicture();
// NSTimer *timer =
[NSTimer scheduledTimerWithTimeInterval:3 target:nil selector:nil userInfo:nil repeats:NO];
NSLog(@"runing.it works!\n");
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
나는 이것을했지만 작동하지는 않는다. – JohnSuu
그리고 다른 질문이 있습니다. 나는 응용 프로그램을 빌드하고 터미널 명령 ./test(the 응용 프로그램의 바이너리 파일)을 실행하여 메시지를 출력합니다. 그러나 어떤 사진도 찍지 마라. 나는 이유를 모른다. 나는 위치 응용 프로그램을 작성했습니다. 방금 같은 방법으로 시작했습니다. 그것은 작동합니다. 내 info.plist에 뭔가를 추가해야합니까? – JohnSuu