如何从带有RenderEffect的ImageView中提取底层位图?

4

我一直在研究如何通过使用RenderEffectImageView中的Bitmap应用模糊效果。我可以通过setRenderEffect实现这一点。但是,当我尝试使用下面的(hacky)代码从ImageView中获取Bitmap时,它没有应用到模糊效果。我认为这是因为该层被应用于ImageView上,而不是底层的位图(无法完全确定)。这引出了我的问题:如何在应用RenderEffect后从渲染在屏幕上的ImageView中获取关联的基础位图?

        val testImageView = ImageView(applicationContext)
        testImageView.setImageBitmap(someBitmap)
        val blurEffect = RenderEffect.createBlurEffect(30.0f, 30.0f, Shader.TileMode.MIRROR)
        testImageView.setRenderEffect(blurEffect)
        testImageView.invalidate()
        val testDrawable = testImageView.drawable as BitmapDrawable
        val testBitmap = testDrawable.getBitmap(); // This doesn't have Blur applied to it even though I'd like it to.

使用RenderScript似乎是可行的,但它已经在API 31之后被弃用了,因此我一直在寻找替代方法。


你找到解决方案了吗?我也遇到了同样的问题。谢谢。 - miga
很遗憾我没有。最终我使用了RenderScript,并计划根据需要使用外部工具。 - Richard Huang
1个回答

0

由于渲染效果仅应用于绘图,因此您需要将整个ImageView绘制到Canvas上才能看到模糊的结果。下面的代码可能会有所帮助:

fun getBitmapWithBlur(imageView: ImageView): Bitmap {
    val bitmapWithBlur = Bitmap.createBitmap(imageView.width, imageView.height, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(bitmapWithBlur)
    imageView.draw(canvas)
    return bitmapWithBlur
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接