标签: android-camerax

如何锁定/冻结 CameraX 预览 TextureView?

我正在关注 CameraX代码实验室,并在 Android Studio 中查看了他们的示例应用程序和源代码,但似乎没有办法冻结或锁定TextureView显示预览帧的内容。

在 Camera2 API 中,我们可以调用类似的东西cameraCaptureSession?.stopRepeating(),并且TextureView将停止从相机获取输入。

我冻结预览的用例是向用户显示当前正在保存的图像,因为我在TextureView.

android android-camerax

5
推荐指数
1
解决办法
4161
查看次数

如何修复 CameraX 旋转支持

我遇到了 CameraX 屏幕旋转支持的问题。

肖像看图

风景: 看图

转换代码:

private void updateTransform() {
    Log.d(TAG, "updateTransform: ");
    Matrix matrix = new Matrix();

    float centerX = cameraViewTextureV.getWidth() / 2f;
    float centerY = cameraViewTextureV.getHeight() / 2f;

    switch (cameraViewTextureV.getDisplay().getRotation()) {
        case Surface.ROTATION_0:
            rotation = 0;
            break;

        case Surface.ROTATION_90:
            rotation = 90;
            break;

        case Surface.ROTATION_180:
            rotation = 180;
            break;

        case Surface.ROTATION_270:
            rotation = 270;
            break;

        default:
            break;
    }

    matrix.postRotate((float) -rotation, centerX, centerY);

    cameraViewTextureV.setTransform(matrix);
}
Run Code Online (Sandbox Code Playgroud)

所以,正如你在图片中看到的,相机支持屏幕旋转不正确......我updateTransform在屏幕旋转时调用方法......从Android开发者网站的cameraX官方指南中获取此代码。

将非常感谢任何修复建议。祝你今天过得愉快!

android matrix android-jetpack android-camerax

5
推荐指数
1
解决办法
5592
查看次数

Camera X 捕捉不同旋转状态下的图像

好吧,我浏览了不同的帖子,发现根据移动制造商的不同,可能会出现捕获图像旋转等复杂情况,因此您必须意识到这一点。我所做的是:

fun rotateBitmap(bitmap: Bitmap): Bitmap? {
    val matrix = Matrix()

    when (getImageOrientation(bitmap)) {
        ExifInterface.ORIENTATION_NORMAL -> return bitmap
        ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> matrix.setScale(-1f, 1f)
        ExifInterface.ORIENTATION_ROTATE_270 -> matrix.setRotate(-90f)
        ExifInterface.ORIENTATION_ROTATE_180 -> matrix.setRotate(180f)
        ExifInterface.ORIENTATION_ROTATE_90 -> matrix.setRotate(90f)
        ExifInterface.ORIENTATION_FLIP_VERTICAL -> {
            matrix.setRotate(180f)
            matrix.postScale(-1f, 1f)
        }
        ExifInterface.ORIENTATION_TRANSPOSE -> {
            matrix.setRotate(90f)
            matrix.postScale(-1f, 1f)
        }
        ExifInterface.ORIENTATION_TRANSVERSE -> {
            matrix.setRotate(-90f)
            matrix.postScale(-1f, 1f)
        }

        else -> return bitmap
}
Run Code Online (Sandbox Code Playgroud)

这有效。但后来我注意到一些非常奇怪的事情,这可能与我配置 Camera X 的方式有关。

使用相同的设备,我得到不同旋转的位图(好吧,这不应该发生。如果设备奇怪地旋转图像,它应该以两种模式旋转图像 - inImageAnalysesUseCaseImageCaptureUseCase)。

那么,为什么会发生这种情况以及如何解决它?

代码实现:

将相机 X 绑定到生命周期:

CameraX.bindToLifecycle(
            this,
            buildPreviewUseCase(),
            buildImageAnalysisUseCase(),
            buildImageCaptureUseCase()
)
Run Code Online (Sandbox Code Playgroud)

预览用例:

private …
Run Code Online (Sandbox Code Playgroud)

android rotation android-camerax

5
推荐指数
1
解决办法
7037
查看次数

CameraX api 仅适用于 Kotlin 还是也适用于 Java?

当我进入示例应用程序代码时,提到在创建项目时选择 Kotlin。

我以前使用过camera2 API。

android-camerax

5
推荐指数
1
解决办法
5023
查看次数

CameraX make ImageAnalysis same size as Preview

I want to be able to get the exact image for analysis step as I get in preview. I have preview use case:

val metrics = DisplayMetrics().also { binding.codeScannerView.display.getRealMetrics(it) }
    val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)
    val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio(screenAspectRatio)
    }.build()
Run Code Online (Sandbox Code Playgroud)

And next to it I have analysis use case config:

val analyzerConfig = ImageAnalysisConfig.Builder().apply {
        setTargetResolution(Size(metrics.heightPixels, metrics.widthPixels))
        setTargetAspectRatio(screenAspectRatio)
        val analyzerThread = HandlerThread(
                "QrCodeReader").apply { start() }
        setCallbackHandler(Handler(analyzerThread.looper))
        setImageReaderMode(
                ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
    }.build()
Run Code Online (Sandbox Code Playgroud)

My preview is fullscreen so it's size is …

android android-camerax

5
推荐指数
1
解决办法
2426
查看次数

Android CameraX Analyzer 图像格式为 YUV_420_888 到 OpenCV Mat

随着Android的CameraX分析仪 ImageProxy使用ImageReader一个默认的引擎盖下YUV_420_888的图像格式。

我想在 OpenCVMat中转换它以便在我的分析器中使用 OpenCV:

override fun analyze(imageProxy: ImageProxy, rotationDegrees: Int) {
    try {
      imageProxy.image?.let {
        // ImageProxy uses an ImageReader under the hood:
        // https://developer.android.com/reference/androidx/camera/core/ImageProxy.html
        // That has a default format of YUV_420_888 if not changed that's the default
        // Android camera format.
        // https://developer.android.com/reference/android/graphics/ImageFormat.html#YUV_420_888
        // https://developer.android.com/reference/android/media/ImageReader.html

        // Sanity check
        if (it.format == ImageFormat.YUV_420_888
            && it.planes.size == 3
        ) {
           // TODO - convert ImageProxy.image to Mat
        } else {
          // …
Run Code Online (Sandbox Code Playgroud)

android opencv kotlin android-camerax

5
推荐指数
2
解决办法
3462
查看次数

使用 CameraX 库 android 时崩溃:java.lang.ClassNotFoundException

我正在使用新的 Jetpack 库 CameraX 制作一个简单的相机应用程序。\n只要我通过添加依赖项来启动应用程序,它就会崩溃。

\n\n

依赖项:

\n\n
implementation "androidx.camera:camera-core:1.0.0-alpha06"\nimplementation "androidx.camera:camera-camera2:1.0.0-alpha06"\n
Run Code Online (Sandbox Code Playgroud)\n\n

崩溃日志:

\n\n
2019-11-28 16:16:45.828 26428-26428/? E/AndroidRuntime: FATAL EXCEPTION: main\nProcess: com.ananth.camerax, PID: 26428\njava.lang.RuntimeException: Unable to get provider androidx.camera.camera2.impl.Camera2Initializer: java.lang.ClassNotFoundException: Didn\'t find class "androidx.camera.camera2.impl.Camera2Initializer" on path: DexPathList[[zip file "/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/lib/arm64, /system/lib64, /system/vendor/lib64]]\n    at android.app.ActivityThread.installProvider(ActivityThread.java:6444)\n    at android.app.ActivityThread.installContentProviders(ActivityThread.java:5946)\n    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5858)\n    at android.app.ActivityThread.-wrap1(Unknown Source:0)\n    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1690)\n    at android.os.Handler.dispatchMessage(Handler.java:105)\n    at android.os.Looper.loop(Looper.java:173)\n    at android.app.ActivityThread.main(ActivityThread.java:6698)\n    at java.lang.reflect.Method.invoke(Native Method)\n    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)\n    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)\n Caused by: java.lang.ClassNotFoundException: Didn\'t find class "androidx.camera.camera2.impl.Camera2Initializer" on path: DexPathList[[zip file "/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/base.apk"],nativeLibraryDirectories=[/data/app/com.ananth.camerax-5fK5oVGKPPgZn_ITpYwEsA==/lib/arm64, /system/lib64, /system/vendor/lib64]]\n    at …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack androidx android-camerax

5
推荐指数
2
解决办法
3735
查看次数

如何获取CameraControl和CameraInfo

我是一名初级 Android 开发人员。\n我正在使用 CameraX 的最新版本 (alpha08)。

\n\n

我正在尝试设置缩放功能,为此我需要 CameraControl。\n要获取 CameraControl,我需要根据https://developer.android.com/reference提供 Camera -> Camera.getCameraControl() 的实例/androidx/相机/核心/CameraControl

\n\n

我似乎无法获取 Camera 的实例。如果我尝试实例化 Camera,它会要求我实现 getCameraControl() 和 getCameraInfo(),它们都返回 null。

\n\n

有人可以向我解释一下该怎么做吗?

\n\n

这是我的 ApplicationClass 文件

\n\n
public class ApplicationClass extends Application implements CameraXConfig.Provider {\n\n    @NonNull\n    @Override\n    public CameraXConfig getCameraXConfig() {\n        return Camera2Config.defaultConfig();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 startCamera() 函数进入我的 CameraActivity

\n\n
private void startCamera() {\n\n        CameraSelector mCameraSelector = CameraSelector.DEFAULT_BACK_CAMERA;\n\n        mFlashToggle.setVisibility(View.VISIBLE);\n        mGalleryFAB.setVisibility(View.VISIBLE);\n        mTakePhotoFAB.setVisibility(View.VISIBLE);\n\n        Point mSize = new Point();\n        Display mDisplay = getWindowManager().getDefaultDisplay();\n\n        mDisplay.getSize(mSize);\n        int mWidth = mSize.x;\n        int …
Run Code Online (Sandbox Code Playgroud)

android androidx android-camerax

5
推荐指数
1
解决办法
2120
查看次数

如何在CameraX中设置视频稳定参数?

我正在我的应用程序中使用CameraX并希望在构建视频稳定功能中使用,但我不知道该怎么做?

正如Camera.Parameters中记录的那样,我们可以使用 3 种方法来 实现实时视频稳定,但我没有找到在 CameraX 中使用这些函数的任何参考public void setVideoStabilization (boolean toggle)。如果不可能,那么我应该使用吗? public boolean isVideoStabilizationSupported ()public boolean getVideoStabilization ()CameraXCamera2

android android-camerax

5
推荐指数
1
解决办法
1477
查看次数

如何让 CameraX 预览在拍照时冻结?

我的自定义 CameraX 流程如下:

  • 打开相机预览(实时)
  • 点击按钮拍照
  • 单击该按钮时有一个过程(将路径转换为位图、旋转图像、自动裁剪图像、保存到设备中)
  • 运行所有进程并成功后,将图像发送到其他Fragment并将其显示为glide

问题是何时running all the process (in step 3)有 adelayed 2 seconds并且相机预览静止livenot freezelock)。怎么做camera preview freeze or lock when running the process

这是我在 Camera X 中运行相机预览的代码:

class CameraFragment : Fragment() {

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_camera, container, false)
        }

        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

kotlin android-camerax

5
推荐指数
1
解决办法
6343
查看次数