CameraXは、Android Studioで必要なサイズまで画像を拡大できないのはなぜですか?


8

CameraXを学習しています。CameraXBasicはサンプルコードです。

私は、ZoomX関数ベースのCameraFragment.kt記述します。コードAを見ることができます。関数はいつでも画像を拡大できます。

私は絵のような、SA小さな値と呼び出したとき、私にズームすることができることを見つけるzoomX(2f)zoomX(3f)が、私のような大きな値を使用するときに画像が再びズームではありませんzoomX(6.0f)zoomX(7.0f)...なぜ?

コードA

   private lateinit var viewFinder: TextureView 
    private var preview: Preview? = null

    fun zoomX(orign: Float ){       
        val x=orign+1

        val singleWidth=viewFinder.width/x
        val singleHeight=viewFinder.height/x

        val left=viewFinder.width/2f-singleWidth/2f
        val right=left+singleWidth
        val top=viewFinder.height/2f-singleHeight/2f
        val bottom=top+singleHeight

        val my= Rect(left.toInt(), top.toInt(), right.toInt(), bottom.toInt())
        preview?.zoom(my)      
    }

あなたは使用することができますCameraControl.setZoomPercentage()からandroidx.camera.camera-core:1.0.0-alpha01
ソネット

ありがとう!詳細について教えてくださいCameraControl.setZoomPercentage()。これ以上のドキュメントとサンプルコードが見つかりません。
HelloCW

私は間違っていた。それは中ですalpha07まだリリースされていません。android.googlesource.com/platform/frameworks/support/+/…最新バージョンはalpha06
sonnet

回答:


3

これは伝統の問題ではなく、の問題ですFuturesCameraXBasicの例をから1.0.0-alpha06に更新すると1.0.0-alpha08、多くの問題が発生し ますが、CameraX CameraControlには次の2つのメソッドがあります。

からの範囲の線形ズーム値で現在のズームを設定0f1.0fます。

linearZoom 0f最小ズームをlinearZoom 1.0f表し、最大ズームを表します。の利点は、スライダーUI要素で使用するためにlinearZoom、視野(FOV)がlinearZoom値に応じて直線的に変化することを保証することです(setZoomRatio(float)ピンチズームジェスチャーではうまく機能します)。

現在のズームを比率で設定します。

これは、両方の電流を修正zoomRatioし、linearZoomそのアプリが観察されている場合zoomRatiolinearZoom、彼らがアップデートを入手にもなります。比率がより小さいCameraInfo.getMinZoomRatio()か大きい場合CameraInfo.getMaxZoomRatio()ListenableFutureは失敗しIllegalArgumentException、現在のズーム比率は変更されません。比率をクランプするのはアプリケーションの義務です。

参照してくださいエグゼキュータをしてもありますCameraXExecutors


CameraXBasicの例を壊すすべてのAPIの変更については、リリースノートまたはコミットも参照してください。これらのAPIの違いについてはこれ以上説明しませんが(これは問題ではなかったため)、分岐しました。問題#131を参照してください(これまでのところ、少なくともプレビューはそこで機能します)。


これが実際に機能する方法です。

val camera: Camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, preview)
val control: CameraControl = camera.cameraControl
control.setZoomRatio(5.0f)

私のモトローラXT1900で作業する1.0fまでのズーム比8.0f

val info: CameraInfo = camera.cameraInfo
val cameraId = (info as Camera2CameraInfoImpl).cameraId
val zoomRatio = info.getZoomRatio().value
val maxZoomRatio = info.getMaxZoomRatio().value
val minZoomRatio = info.getMinZoomRatio().value
val linearZoom = info.getLinearZoom().value

どうもありがとうございました!完全なサンプルコードを見せてもらえますか?実行してテストできます。
HelloCW

ところで、CameraXBasicプロジェクトは、1.0.0-alpha06から1.0.0-alpha08に更新した後に実行できません。
HelloCW

ありがとう!マージはまだ完了していないようなので、テストするためにPCにプルすることはできません。コードをプルしてテストするための一時的なフォークをください。
HelloCW

ところで、私はGitHubの初心者です。github.com
android /

現在、私はフォークcaren / tap_to_focusのみをプルしますが、これは「1.0.0-alpha05」に基づいています
HelloCW

0

それは間のAndroidの伝統、ズームレベルが存在だ01多くの他の値のような..

0 最低のズームレベルを意味します。

1 最大ズームレベルを意味します。

それはあなたのようにそれを増やすように、float値だ0.10.20.9というように。


0

まず、getMaxZoom()メソッドを使用して、カメラの最大ズーム値を確認します。

https://developer.android.com/reference/android/hardware/Camera.Parameters.html#getMaxZoom()

カメラプレビューを使用している場合は、を使用してカメラプレビューのズームインを設定できますRect。以下のように-

PreviewConfig config = new PreviewConfig.Builder().build();
    Preview preview = new Preview(config);

    Rect rect = Rect(left, top, right, bottom);
    preview.zoom(rect)

    preview.setOnPreviewOutputUpdateListener(
        new Preview.OnPreviewOutputUpdateListener() {
            @Override
            public void onUpdated(Preview.PreviewOutput previewOutput) {
                // Your code here. For example, use previewOutput.getSurfaceTexture()
                // and post to a GL renderer.
            };
    });

    CameraX.bindToLifecycle((LifecycleOwner) this, preview);

ここから詳細を確認できます- ダブルフィンガータッチを使用したAndroidカメラのプレビューズーム


ありがとう!ただし、CameraXはgetMaxZoom()をサポートしていません。
HelloCW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.