close

想要利用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);

 

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 無人知曉的Tony 的頭像
    無人知曉的Tony

    無人知曉的Tony

    無人知曉的Tony 發表在 痞客邦 留言(0) 人氣()