Я использовал пример кода от Google для реализации пользовательской камеры с помощью Camera2 API. Я хочу показать захваченное изображение в следующем упражнении.
Пример кода Camera2Basic
Однако я не могу безопасно выйти из 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));
}
}