【问题标题】:How to capture preview image frames from Camera Application in Android Programming?如何在 Android 编程中从相机应用程序中捕获预览图像帧?
【发布时间】:2010-07-31 03:33:53
【问题描述】:

我正在编写一个应用程序来捕获相机预览帧并将其转换为 Android 中的位图。这是我的代码:

   Camera.PreviewCallback previewCallback = new Camera.PreviewCallback()  
    { 
            public void onPreviewFrame(byte[] data, Camera camera)  
            { 
                    try 
                    { 
                            BitmapFactory.Options opts = new BitmapFactory.Options(); 
                            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);//,opts); 
                    } 
                    catch(Exception e) 
                    {

                    } 
            } 

    }; 

    mCamera = Camera.open();
    mCamera.setPreviewCallback(previewCallback); 

在我开始预览后,回调被调用了数据,但位图为空。

将字节数组转换为BitMap时我做错了什么?

【问题讨论】:

标签: android bitmap camera


【解决方案1】:

onPreviewFrame() 函数中,您应该首先检查图像格式。
这是 NV21 示例。

public void onPreviewFrame(byte[] data, Camera camera) 
{
    Parameters parameters = camera.getParameters();
    imageFormat = parameters.getPreviewFormat();
    if (imageFormat == ImageFormat.NV21)
    {
        Rect rect = new Rect(0, 0, PreviewSizeWidth, PreviewSizeHeight); 
        YuvImage img = new YuvImage(data, ImageFormat.NV21, PreviewSizeWidth, PreviewSizeHeight, null);
        OutputStream outStream = null;
        File file = new File(NowPictureFileName);
        try 
        {
            outStream = new FileOutputStream(file);
            img.compressToJpeg(rect, 100, outStream);
            outStream.flush();
            outStream.close();
        } 
        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

其他拍照方式,请看这篇文章:how to use camera in android

【讨论】:

    【解决方案2】:

    在使用 BitmapFactory 之前,您是否尝试过将预览帧数据解码为 RGB?默认格式是 YUV,我不确定它是否与 BitmapFactory 兼容。 Dave Manpearl 的解码方法可以在这里找到:

    Getting frames from Video Image in Android

    让我知道它是否有效。

    干杯,

    保罗

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2011-03-23
      相关资源
      最近更新 更多