我使用来自 Google 的示例代码来实现使用 Camera2 API 的自定义相机。我想在下一个活动中显示捕获的图像。
但是,我无法安全退出 Camera2BasicFragment 并启动下一个活动以显示捕获的图像。
这是我试图开始下一个活动的代码:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener
= new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage(), mFile));
startActivity(new Intent(getActivity(), DisplayImage.class));
}
};
这是保存图像并裁剪它的功能。我不确定裁剪是否正确。我只想能够首先在下一个活动中显示图像。当我稍后返回拍摄更多图像时,相机必须工作正常。
private class ImageSaver implements Runnable {
/**
* The JPEG image
*/
private final Image mImage;
/**
* The file we save the image into.
*/
private final File mFile;
ImageSaver(Image image, File file) {
mImage = image;
mFile = file;
}
@Override
public void run() {
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.remaining()];
buffer.get(bytes);
FileOutputStream output = null;
try {
output = new FileOutputStream(mFile);
output.write(bytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
mImage.close();
if (null != output) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
capturedImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
int width = linearLayout.getWidth();
int height = linearLayout.getHeight();
int left = width/6;
int top = height/8;
croppedImage = Bitmap.createBitmap(capturedImage, left, top, 5*(width/6), 2*(height/3));
}
}