2012年3月26日月曜日

iphoneのライトアプリの作り方 AVFoundationを使ってtorchモードをマスター!

昨日に続いて、
しっかりAVFoundationを勉強したいと思うので、
再度復習してみます。

まずは、いつものように既存のワークフレームを読み込みます。
今回使うのは、「AVFoundation.framework」。

.hファイル
---------
#import

@interface lightViewController : UIViewController
{
AVCaptureSession *captureSession;
}

@property (nonatomic, retain) AVCaptureSession *captureSession;

- (AVCaptureSession *)session;
-(void)lighton:(id)sender;
-(void)lightoff:(id)sender;

@end
---------


#import
「AVFoundation.framework」のフレームワークを使ったので、
ヘッダーファイルにインポートします。



AVCaptureSession *captureSession;
AVCaptureSessionのインスタンス変数「captureSession」を作ります。



@property (nonatomic, retain) AVCaptureSession *captureSession;
アクセサメソッド用にプロパティを作ります。


ここは合っているかわかりません、
もし違ってたら指摘して下さい><
- (AVCaptureSession *)session;
-(void)lighton:(id)sender;
-(void)lightoff:(id)sender;

アクション用のやつを書きます。
- (AVCaptureSession *)session; →ライトを照らす設定
-(void)lighton:(id)sender; →ボタンでライトのオンを設定
-(void)lightoff:(id)sender; →ボタンでライトのオフを設定

以上でヘッダーファイルの設定は終了です!

.mファイル
---------

@implementation lightViewController

@synthesize captureSession;

- (void)viewDidLoad {
[super viewDidLoad];
self.captureSession = [self session];
}

- (void)viewDidUnload {
self.captureSession = nil;
}


- (AVCaptureSession *)session {
NSError *error = nil;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
AVCaptureMovieFileOutput *movieFileOutput = [[[AVCaptureMovieFileOutput alloc] init] autorelease];
[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];
AVCaptureSession *_captureSession = [[[AVCaptureSession alloc] init] autorelease];
[_captureSession beginConfiguration];
if ([_captureSession canAddInput:videoInput]) {
[_captureSession addInput:videoInput];
}
if ([_captureSession canAddOutput:movieFileOutput]) {
[_captureSession addOutput:movieFileOutput];
}
_captureSession.sessionPreset = AVCaptureSessionPresetLow;
[_captureSession commitConfiguration];
return _captureSession;
}
-(void)lighton:(id)sender {
[self.captureSession startRunning];
NSError *error = nil;
AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[captureDevice lockForConfiguration:&error];
captureDevice.torchMode = AVCaptureTorchModeOn;
[captureDevice unlockForConfiguration];
}


-(void)lightoff:(id)sender {
NSError *offerror = nil;
AVCaptureDevice *offcaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
[offcaptureDevice lockForConfiguration:&offerror];
offcaptureDevice.torchMode = AVCaptureTorchModeOff;
[offcaptureDevice unlockForConfiguration];
}

- (void)dealloc {
[super dealloc];
[self.captureSession release];
}

---------


self.captureSession = [self session];
captureSessionインスタンス変数に、sessionメソッドを渡します。



AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
デバイスの設定をします。今回はビデオタイプを選択。
詳細は公式サイトに詳しく書いてあります。


--------



デバイスおよびデバイス入力の作成と設定
キャプチャデバイスはAVCaptureDeviceオブジェクトで表されます。このクラスには、必要な入力
タイプのオブジェクトを取得するためのメソッドが用意されています。デバイスには1つ以上のポー
トがあり、AVCaptureInputオブジェクトを使用して各ポートを設定します。通常、キャプチャ入
力はデフォルト設定で使用します。
ビデオキャプチャデバイスを見つけ、そのデバイスを使用してデバイス入力を作成し、そのデバイ
ス入力にセッションを追加します。
AVCaptureDevice *device =
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *input =
[AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// エラーを適切に処理する
}
[session addInput:input];


--------


▼あとは、昨日のブログに続きます!

0 件のコメント:

コメントを投稿