簡體   English   中英

如何從Android編程中的Camera Application捕獲預覽圖像幀?

[英]How to capture preview image frames from Camera Application in Android Programming?

我正在編寫一個應用程序來捕獲相機預覽幀並將其轉換為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時,我做錯了什么?

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();
        }
    }
}

另一種拍照方式,看看這篇文章: 如何在android中使用相機

在使用BitmapFactory之前,您是否嘗試將預覽幀數據解碼為RGB? 默認格式是YUV,我不確定它與BitmapFactory兼容。 Dave Manpearl的解碼方法可以在這里找到:

從Android中的視頻圖像中獲取幀

如果有效,請告訴我。

干杯,

保羅

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM