Android ImageReader.getPlanes()返回异常:RGBA覆盖BLOB格式缓冲区应具有高度==宽度
我正在使用ImageReader从服务中获取Android设备的屏幕截图。 但是imageReader.planes返回AndroidMediaUtils:RGBA override BLOB格式缓冲区应具有高度==宽度 我的代码:Android ImageReader.getPlanes()返回异常:RGBA覆盖BLOB格式缓冲区应具有高度==宽度,android,Android,我正在使用ImageReader从服务中获取Android设备的屏幕截图。 但是imageReader.planes返回AndroidMediaUtils:RGBA override BLOB格式缓冲区应具有高度==宽度 我的代码: fun takeScreen() : ByteArray? { var result = byteArrayOf() val display = (getSystemService(Context.WINDOW_SERVICE) as WindowM
fun takeScreen() : ByteArray? {
var result = byteArrayOf()
val display = (getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
mediaProjection.registerCallback(object : MediaProjection.Callback() {}, null)
val imageReader = ImageReader.newInstance(
display.width, display.height,
ImageFormat.JPEG, 2
)
val metrics = DisplayMetrics()
display.getMetrics(metrics)
val flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY or DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC
mediaProjection.createVirtualDisplay( "vd", display.width, display.height, metrics.densityDpi, flags, imageReader.surface, null, null)
imageReader.setOnImageAvailableListener({
val image = it.acquireLatestImage()
if (image != null) {
val planes: Array<Image.Plane> = image.planes
val buffer = planes[0].buffer
val pixelStride: Int = planes[0].pixelStride
val rowStride = planes[0].rowStride
val rowPadding: Int = rowStride - pixelStride * it.width
val bitmap = Bitmap.createBitmap(
it.width + rowPadding / pixelStride,
it.height, Bitmap.Config.ARGB_8888
)
bitmap.copyPixelsFromBuffer(buffer)
val stream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream)
result = stream.toByteArray()
}
}, null)
return result
}
fun takeScreen():ByteArray?{
var result=byteArrayOf()
val display=(作为WindowManager的getSystemService(Context.WINDOW\u服务)。defaultDisplay
mediaProjection.registerCallback(对象:mediaProjection.Callback(){},null)
val imageReader=imageReader.newInstance(
display.width,display.height,
ImageFormat.JPEG,2
)
val metrics=DisplayMetrics()
display.getMetrics(度量)
val flags=DisplayManager.VIRTUAL\u DISPLAY\u FLAG\u OWN\u CONTENT\u ONLY或DisplayManager.VIRTUAL\u DISPLAY\u FLAG\u PUBLIC
mediaProjection.createVirtualDisplay(“vd”、display.width、display.height、metrics.densityDpi、flags、imageReader.surface、null、null)
imageReader.setOnImageAvailableListener({
val image=it.acquireLatestImage()
如果(图像!=null){
val平面:数组=image.planes
val buffer=平面[0]。缓冲区
val pixelStride:Int=平面[0]。pixelStride
val rowStride=平面[0]。rowStride
val rowPadding:Int=rowStride-pixelStride*it.width
val bitmap=bitmap.createBitmap(
it.width+行填充/像素步长,
it.height,Bitmap.Config.ARGB_8888
)
位图.copyPixelsFromBuffer(缓冲区)
val stream=ByteArrayOutputStream()
bitmap.compress(bitmap.CompressFormat.JPEG,50,流)
结果=stream.toByteArray()
}
},空)
返回结果
}
有什么问题吗?我通过将ImageFormat.JPEG更改为PixelFormat.RGBA_8888解决了问题。我通过将ImageFormat.JPEG更改为PixelFormat.RGBA_8888解决了问题。这应该被接受为解决了实际问题的答案