RBGA8888转nv21
由于近期处理ImageReader.OnImageAvailableListener中onImageAvailable(reader: ImageReader?)里面的ImageReader数据,需要将其转换为nv21数据时遇到了一些问题,记录一下解决方法和转换思路。下面的类提供了转换的核心方式和思路。
class ImageUtil {
companion object {
/**
* Image中的rgba8888转为nv21
* @param image ImageReader 中的image对象
* @param width 录制时指定的宽
* @param height 录制时指定的高
*/
fun image_rgba8888_to_nv21(image: Image, width: Int, height: Int): ByteArray {
//获取基本参数
val mWidth: Int = image?.width //image中图像数据得到的宽
val mHeight: Int = image?.height //image中图像数据得到的高
val planes = image.planes //image图像数据对象
val buffer = planes[0].getBuffer()
val pixelStride = planes[0].getPixelStride() //像素步幅
val rowStride = planes[0].getRowStride() //行距
val rowPadding = rowStride - pixelStride *