簡體   English   中英

拍攝圖像時,Redmi Note7 s camera2 API Android 中的相機凍結

[英]While capturing image camera gets freeze in Redmi Note7 s camera2 API Android

在下面的代碼中,我剛剛讀取了圖像並將其保存到圖庫中。

            public void onImageAvailable(ImageReader reader) {
                Image image = null;
                try {
                    image = reader.acquireLatestImage();
                    buffer = image.getPlanes()[0].getBuffer();
                    bytes = new byte[buffer.capacity()];
                    buffer.get(bytes);
                    save(bytes);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                } finally {
                    if (image != null) {
                        image.close();
                    }
                }

私有無效保存(字節 [] 字節)拋出 IOException {

                if (!myDir.exists()) {
                    myDir.mkdirs();
                }

                Random generator = new Random();
                int n = 10000;
                n = generator.nextInt(n);
                String fname = "Image-" + n + ".png";

                File file = new File(myDir, fname);

                if (file.exists()) file.delete();



                OutputStream output = null;
                try {
                    output = new FileOutputStream(file);
                    output.write(bytes);
                    scanFile(file.getAbsolutePath());

// 最終 int 旋轉 = getImageOrientation(file.getAbsolutePath());

                } finally {
                    if (null != output) {
                        output.close();
                    }
                }
            }

我的猜測是,您在每個操作完成之前關閉您的圖像。 首先獲取您的圖像,例如:

private ImageReader mImageReader;
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new
        ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {

                if(count==0) {
                    mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage()));
                    ++count;
                }
            }
        };

之后,您可以在單獨的線程中執行您想要執行的操作,例如:

private class ImageSaver implements Runnable {

    private final Image mImage;

    public ImageSaver(Image image) {
        mImage = image;
    }

    @Override
    public void run() {


        //Do what you want to do here and close your Image after that. Code here!!

        mImage.close();
        --count;
    }
}

我使用 int ++count --count 來控制我的流程。

暫無
暫無

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

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