【问题标题】:ImageReader.getPlanes() returns Exception: RGBA override BLOB format buffer should have height == widthImageReader.getPlanes() 返回异常:RGBA 覆盖 BLOB 格式缓冲区应具有高度 == 宽度
【发布时间】:2020-11-05 17:26:32
【问题描述】:

我正在使用 ImageReader 从服务中截取 Android 设备的屏幕截图。 但是 imageReader.planes 返回 AndroidMediaUtils: RGBA override BLOB 格式缓冲区应该有 height == width

我的代码:

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
}

怎么了?

【问题讨论】:

    标签: android


    【解决方案1】:

    我通过将 ImageFormat.JPEG 更改为 PixelFormat.RGBA_8888 来解决。

    【讨论】:

    • 这应该被接受为解决实际问题的答案
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2015-09-19
    • 2013-07-14
    • 2010-12-21
    • 2014-01-24
    相关资源
    最近更新 更多