Я не думаю, что есть способ обход ошибки, поскольку по моему опыту изображения уже генерируются системой, и это не проблема преобразования в PNG.
Я вижу, что вы используете API-интерфейс Camera 2 из своего комментария, и поскольку вы используете формат YUV, я считаю, что вы пытаетесь сохранить изображения из непрерывной ленты с камеры (в отличие от съемки с полным разрешением) , Если это так, я предлагаю использовать более старый API-интерфейс камеры, если это вообще возможно, поскольку я не видел устройство, которое не работает при захвате изображений предварительного просмотра в формате YUV (NV21), которые легко могут быть преобразованы в PNG , хотя, чтобы пройти через шаг JPEG:
YuvImage yuvImage = new YuvImage(nv21bytearray, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, os);
byte[] jpegByteArray = os.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegByteArray, 0, jpegByteArray.length);
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/imagename.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
с nv21bytearray
будучи байтовый массив NV21 возвращаемый старой камеры API onPreviewFrame(...) метода.
Вы используете API 2 камеры или старый? – silvaren
@silvaren Я использую Camera 2 API – Araw