我刚刚开始使用 androidX 相机,我正在使用它的功能
imagecatpure.takePicture()
,并且我将 ImageProxy
作为对象,所以现在我的问题是如何将其转换为 jpeg/png/jpg
以便我可以通过API?
还有其他更有效的方法来实现这一目标吗?
我已经使用下面的代码解决了这个问题
private void takePicture() {
if (imageCapture != null) {
ByteArrayOutputStream result = new ByteArrayOutputStream();
getCacheDir();
imageCapture.takePicture(new ImageCapture.OutputFileOptions.Builder(result).build(),
Executors.newSingleThreadExecutor(),
new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
File cache = new File(getCacheDir().getAbsolutePath() + "/" + "captured.png");
try (FileOutputStream stream = new FileOutputStream(cache)) {
stream.write(result.toByteArray());
upload(cache); // your upload function
} catch (Exception e) {
Log.e(TAG, "onImageSaved: Exception occurred", e);
}
}
@Override
public void onError(@NonNull ImageCaptureException exception) {
Log.i(TAG, "onError: ", exception);
}
});
}
}
toBitmap()
方法。使用 Bitmap 中的 compress
方法将此位图保存到文件中。确保按照图像代理文档中的指示应用适当的旋转。这在位图上最容易做到。
我不建议使用已接受的答案,因为您实际上被迫等到保存图像才能执行下一步操作。所讨论的原始方法
takePicture(Executor,ImageCapture.OnImageCapturedCallback)
包含一个具有更大灵活性的回调。主要区别在于,通过此回调,您可以首先通知用户照片已拍摄,然后您可以在保存图像时执行下一步需要执行的任何操作。