fix: Fix savePhotoToFile()
sometimes writing empty files (#1746)
This commit is contained in:
parent
cebb7b3e89
commit
fc0e2bf34b
@ -1,5 +1,6 @@
|
|||||||
[*.{kt,kts}]
|
[*.{kt,kts}]
|
||||||
indent_size=2
|
indent_size=2
|
||||||
|
indent_style=space
|
||||||
insert_final_newline=true
|
insert_final_newline=true
|
||||||
max_line_length=off
|
max_line_length=off
|
||||||
disabled_rules=no-wildcard-imports
|
disabled_rules=no-wildcard-imports
|
||||||
|
@ -64,15 +64,22 @@ suspend fun CameraView.takePhoto(optionsMap: ReadableMap): WritableMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun writeImageToStream(imageBytes: ByteArray, stream: OutputStream, isMirrored: Boolean) {
|
private fun writePhotoToFile(photo: CameraSession.CapturedPhoto, file: File) {
|
||||||
if (isMirrored) {
|
val byteBuffer = photo.image.planes[0].buffer
|
||||||
|
if (photo.isMirrored) {
|
||||||
|
val imageBytes = ByteArray(byteBuffer.remaining()).apply { byteBuffer.get(this) }
|
||||||
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
|
val bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.size)
|
||||||
val matrix = Matrix()
|
val matrix = Matrix()
|
||||||
matrix.preScale(-1f, 1f)
|
matrix.preScale(-1f, 1f)
|
||||||
val processedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, false)
|
val processedBitmap =
|
||||||
|
Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, false)
|
||||||
|
FileOutputStream(file).use { stream ->
|
||||||
processedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
|
processedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
stream.write(imageBytes)
|
val channel = FileOutputStream(file).channel
|
||||||
|
channel.write(byteBuffer)
|
||||||
|
channel.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,12 +90,8 @@ private suspend fun savePhotoToFile(context: Context,
|
|||||||
when (photo.format) {
|
when (photo.format) {
|
||||||
// When the format is JPEG or DEPTH JPEG we can simply save the bytes as-is
|
// When the format is JPEG or DEPTH JPEG we can simply save the bytes as-is
|
||||||
ImageFormat.JPEG, ImageFormat.DEPTH_JPEG -> {
|
ImageFormat.JPEG, ImageFormat.DEPTH_JPEG -> {
|
||||||
val buffer = photo.image.planes[0].buffer
|
|
||||||
val bytes = ByteArray(buffer.remaining()).apply { buffer.get(this) }
|
|
||||||
val file = createFile(context, ".jpg")
|
val file = createFile(context, ".jpg")
|
||||||
FileOutputStream(file).use { stream ->
|
writePhotoToFile(photo, file)
|
||||||
writeImageToStream(bytes, stream, photo.isMirrored)
|
|
||||||
}
|
|
||||||
return@withContext file.absolutePath
|
return@withContext file.absolutePath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user