繁体   English   中英

如何在Camera2 API中将已处理的帧绘制回屏幕

How to draw a processed frame back to the screen in Camera2 api

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图从Android Studio中的Camera2 API抓取视频帧,并对每个帧进行一些简单的图像处理。

我遇到的问题是将已处理的帧绘制回屏幕。

我正在使用来自camera2raw示例的代码。

我正在修改存储所有帧的缓冲区中的像素值。

现在,我只是向每个像素添加一个常数值,以查看屏幕上的图像是否被修改。

通过向每个像素添加一个非常大的值,不会更改屏幕上的图像。

因此,我相当有信心不会将修改后的像素值写回到屏幕上。

以下是程序相关部分的代码片段:

ImageReader.OnImageAvailableListener imageAvailableListener = new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(ImageReader reader) {
        Image image = null;
        try {
            image = reader.acquireLatestImage();

            ByteBuffer Y = image.getPlanes()[0].getBuffer();
            ByteBuffer U = image.getPlanes()[1].getBuffer();
            ByteBuffer V = image.getPlanes()[2].getBuffer();

            int Yb = Y.remaining();
            int Ub = U.remaining();
            int Vb = V.remaining();

            byte[] data = new byte[Yb + Ub + Vb ];
            //your data length should be this byte array length.

            for (int i = 0; i < 512; i++)
            {
                for (int j = 0; j < 512; j++)
                {
                    int idx = i * 512 + j;
                    data[idx] += 255;
                }
            }
            // Screen should now show some distortion.
            Y.get(data, 0, Yb);
            U.get(data, Yb, Ub);
            V.get(data, Yb+ Ub, Vb);

        } catch (Exception ee) {
        } finally {
            if (image != null)
                image.close();
        }
    }

    //void save(byte[] bytes) {
        File file12 = getOutputMediaFile();
        OutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(file12);
            outputStream.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (outputStream != null)
                    outputStream.close();
            } catch (Exception e) {
            }
        }
   // }
};

请让我知道是否提供进一步的解释或部分代码有助于使我的问题更加清楚。

有人可以告诉我如何将修改后的框架写回到屏幕上吗?

我也尝试这样做:

// Convert bytes data into a Bitmap
Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
ImageView imageView = new ImageView(MainActivity.this);
// Set the Bitmap data to the ImageView
imageView.setImageBitmap(bmp);
// Get the Root View of the layout
ViewGroup layout = (ViewGroup) findViewById(android.R.id.content);
// Add the ImageView to the Layout
layout.addView(imageView);

有与此问题相关的帖子,但没有一个有确切的解决方案。 任何人都可以向我提供有关如何实现我所描述的详细逐步说明的链接吗?

问题暂未有回复.您可以查看右边的相关问题.
1 如何在 Camera2 Api 上运行 2 个不同的预览?

我希望从 2 个不同的摄像机运行预览,例如同时预览前后(或后宽和后超宽)。 我可以创建一个预览,但不知道如何运行 2 个预览。 关于如何做到这一点的任何指南? 此外,如果需要在 HAL 方面进行任何更改,也请告知。 ...

2 camera2api自动捕获当前预览帧

在Android上使用Camera 2 API 对于实时图像处理,我设置了一个侦听器来进行一些图像处理,以给出是否捕获图像的布尔输出。 当前,我正在使用camera2Raw示例,该takePicture()在单击按钮时具有takePicture() 。 如何确保捕获到我处理过的同一帧并 ...

6 如何在Camera2 API中启用前置摄像头?

如何在Camera2 API上启用前置摄像头。有人可以帮忙吗? 我有这个Camera2 API代码。这仅设置了设备的主摄像头,我希望在单击按钮时启用前后摄像头。什么是LENS_FACING_FRONT ,我是Android编程的新手。 ...

8 Camera2 API访问同步

Camera2 API允许我们指定线程(经过Handler上,我们收到包含回调实例) CameraDevice , CameraCaptureSession , CaptureResult等。我们使用来自这些回调配置捕获会话的信息,创建捕获请求并获得捕获结果。 但是,当用户通过UI控制摄像头配置( ...

10 Camera2 API停止旋转预览

我正在使用Camera2 Basic,并且试图在手机方向更改时停止旋转预览。 如果您在Android中打开普通摄像头应用,则旋转手机时摄像头预览不会旋转,而是围绕它的界面。 这是我想要达到的效果。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM