想要利用XE6的TCameraComponent元件做QRCode Scan的功能,卻發現這個元件連對焦功能都不支援…
研究了一下TCameraComponent元件的原始碼後,發覺其實底層JNI的部份其實都有完整的搬過來,只是TCameraComponent元件沒有開放對焦的功能而已…
只要小小的修改一下TCameraComponent元件,就可以改出這個能力了!
元件的原始碼位置:
C:\Program Files\Embarcadero\Studio\14.0\source\fmx\FMX.Media.pas
C:\Program Files\Embarcadero\Studio\14.0\source\fmx\FMX.Media.Android.pas
要修改的話,請把這兩個檔案Copy到自己的專案目錄下,不要直接修改原始的檔案,那是沒作用的!
目前想出最簡單的修改方法…是修改原本的SetFocusMode函式,因為很直覺的覺得…都修改了對焦模式了,不就是想要對焦,所以直接讓這個函式變成呼叫後可以設定對焦模式加自動對焦!
以下為修改方法,兩個檔案都只需要更動一行Code…
[FMX.Media.pas]
找到TCameraComponent類別下的procedure SetFocusMode(const Value: TFocusMode);這個函式定義
將上述這行定義往下幾行,移到public區段即可,這樣之後才可以直接從元件call這個函式
[FMX.Media.Android.pas]
找到以下函式並加入呼叫autoFocus函式即可:
procedure TAndroidVideoCaptureDevice.SetFocusMode(const Value: TFocusMode);
var
Params: JCamera_Parameters;
begin
[…中間略過…]
Camera.setParameters(Params);
Camera.autoFocus(nil); //加入這行即可
end;
使用時,只要拉個TCameraComponent元件到程式中,像以下方式呼叫即可自動對焦:
CameraComponent1.SetFocusMode(TFocusMode.AutoFocus);
留言列表