en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

1.17.2011

iOS 4 上的 LED 燈控制方式

 

要在 iOS 4 上控制相機的 LED 閃光燈其實並不困難,使用 AV Foundation 就能輕易實現,在之前的文章 Camera / 攝影機畫面的擷取方式-前篇,我們已經使用 AV Foundation 來擷取 Camera,現在我們一樣使用此方法,只是不將圖片輸出,而是打開相機的 LED 閃光燈,其程式碼如下。(View-based Template)

首先是環境設定,加入 AVFoundation 的 Framework,加入的方法是在 Groups & Files 內的專案名稱上按下右鍵 > Add > Existing Frameworks,之後選擇需要的 framework 並 Add 即可。

在加入 Framework 之後,還必須要匯入 AVFoundation 的標頭檔。

#import <AVFoundation/AVFoundation.h>
接下來就是相機的 LED 閃光燈的控制方式了,你可以使用 Switch 或是自行定義的按鈕與和布林變數等來進行相關操作。

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

//建立session
session = [[AVCaptureSession alloc] init];

//建立與設定device input session
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
[session addInput:input];

//設定outpit
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
[session addOutput:output];

//啟動session的configuration
[session beginConfiguration];
[device lockForConfiguration:nil];

//開啟LED燈
[device setTorchMode:AVCaptureTorchModeOn];

[device unlockForConfiguration];
[session commitConfiguration];

//啟動session
[session startRunning];

[output release];

上述程式碼是將 session 建立好之後設定開啟 LED 閃光燈,並且讓 session 持續運行, LED 閃光燈 就會保持在 always on 的狀態,如果要關閉 LED 閃光燈只要將 session 停止即可。

//停止session
[session stopRunning];

最後按照本範例的寫法,如果你將 LED 閃光燈狀態設定在 AVCaptureTorchModeAuto 在開啟開關時如果光線夠暗  LED 閃光燈才會自動開啟,而判斷光線明暗的時間點只有在開啟開關的那一瞬間,即便是 session 持續運行環境光線夠暗 LED 閃光燈也不會自動啟動。






沒有留言:

張貼留言