[英]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.