将android camera2图像保存为无损PNG

将android camera2图像保存为无损PNG,第1张

概述我正在尝试将android.hardware.camera2图像保存为无损格式.我已经使用杂乱的代码为JPEG(有损)和DMG(原始的,但庞大而又难以使用的)工作了:privatefunsave(image:Image,captureResult:TotalCaptureResult){valfileWithoutExtension=File(Environment.getExternalSto

我正在尝试将android.harDWare.camera2图像保存为无损格式.

我已经使用杂乱的代码为JPEG(有损)和DMG(原始的,但庞大而又难以使用的)工作了:

private fun save(image: Image, captureResult: TotalCaptureResult) {    val fileWithoutExtension = file(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "myimage_${System.currentTimeMillis()}")    val file: file = when (image.format) {        ImageFormat.JPEG -> {            val buffer = image.planes[0].buffer            val bytes = ByteArray(buffer.remaining())            buffer.get(bytes)            val file = file("$fileWithoutExtension.jpg")            file.writeBytes(bytes)            file        }        ImageFormat.RAW_SENSOR -> {            val dngCreator = DngCreator(mode.characteristics, captureResult)            val file = file("$fileWithoutExtension.dmg")            fileOutputStream(file).use { os ->                dngCreator.writeImage(os, image)            }            file        }        else -> Todo("Unsupported image format: ${image.format}")    }    Log.i(TAG, "Wrote image:${file.canonicalPath} ${file.length() / 1024}k")    image.close() // necessary when taking a few shots}

但是我坚持的是用某种保存为更合理的PNG的内容替换RAW_SENSOR部分.是吗

>一个坏主意,因为RAW_SENSOR与普通图像格式有很大不同,以至于我不得不经历太多的痛苦才能转换它?
>一个坏主意,因为我应该将上游捕获设置为捕获更合理的东西,例如FLEX_RGB_888?
>一个好主意,因为以下代码中存在一些愚蠢的错误? (它死于缓冲区不足以容纳androID.graphics.Bitmap.copyPixelsFromBuffer(Bitmap.java:593)的像素

我的尝试:

fun writerawImagetoPng(image: Image, pngfile: file) {    Bitmap.createBitmap(image.wIDth, image.height, Bitmap.Config.ARGB_8888).let { latestBitmap->        latestBitmap.copyPixelsFromBuffer(image.planes[0].buffer!!)        ByteArrayOutputStream().use { baos ->            latestBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos)            pngfile.writeBytes(baos.toByteArray())        }    }}

解决方法:

您想要捕获YUV_420_888格式的数据;不管怎么说,这就是JPEG压缩器的开始.

您必须自己将其转换为RGB位图,但是-没有方便的方法.

总结

以上是内存溢出为你收集整理的将android camera2图像保存为无损PNG全部内容,希望文章能够帮你解决将android camera2图像保存为无损PNG所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存