首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中通过摄像头预览获取较小的数据

在Android中通过摄像头预览获取较小的数据
EN

Stack Overflow用户
提问于 2011-12-04 08:59:14
回答 3查看 1.6K关注 0票数 3

嗨,我正在android上开发实时图像处理应用程序。我使用PreviewCallback在每一帧中获取图像。当我在平板设备上获取数据时,返回的数据非常大。因此,实时处理大数据太难了。我的问题是,有没有办法从相机预览中获得较小的分辨率数据。

摄像头预览代码:

代码语言:javascript
复制
public void onPreviewFrame(byte[] data, Camera camera) {
                        // TODO Auto-generated method stub
                        Camera.Parameters params = camera.getParameters();

                        Log.v("image format", Integer.toString(params.getPreviewFormat()));
                        //Frame captureing via frameManager
                        frameManager.initCamFrame(params.getPreviewSize().width, params.getPreviewSize().height,
                                data);
                    }
                });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-04 10:56:39

您可以调用参数.setPreviewSize(width,height),但您希望在摄像头预览开始之前这样做。并且你需要使用支持的值,也就是之前的答案。

你也不应该每一帧都调用camera.getParameters(),只需调用一次并将值保存到某个变量即可。您在onPreviewFrame中有一些有限的时间,因为byte[]数据在每一帧上都会被覆盖,所以尝试在这里只做重要的事情。

你应该使用setPreviewCallbackWithBuffer,它可以很好地提高性能--请检查this post

票数 0
EN

Stack Overflow用户

发布于 2011-12-04 10:29:52

您是否知道您可以通过调用getSupportedPreviewSizes()从相机参数中获取支持的预览大小列表?我尝试过的所有设备都返回了一个排序列表,尽管有时是升序的,有时是降序的。您可能希望手动迭代列表以找到“最小”预览大小,或者首先对其进行排序并获取第一项。

票数 0
EN

Stack Overflow用户

发布于 2015-10-15 21:13:44

您可以尝试这样做:

代码语言:javascript
复制
 @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
        try {
            byte[] baos = convertYuvToJpeg(data, camera);
            StringBuilder dataBuilder = new StringBuilder();
            dataBuilder.append("data:image/jpeg;base64,").append(Base64.encodeToString(baos, Base64.DEFAULT));
            mSocket.emit("newFrame", dataBuilder.toString());
        } catch (Exception e) {
           Log.d("########", "ERROR");
        }
    }

};


public byte[] convertYuvToJpeg(byte[] data, Camera camera) {

    YuvImage image = new YuvImage(data, ImageFormat.NV21,
            camera.getParameters().getPreviewSize().width, camera.getParameters().getPreviewSize().height, null);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int quality = 20; //set quality
    image.compressToJpeg(new Rect(0, 0, camera.getParameters().getPreviewSize().width, camera.getParameters().getPreviewSize().height), quality, baos);//this line decreases the image quality


    return baos.toByteArray();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8372431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档