Android关闭硬件加速对PorterDuffXfermode的影响

Android关闭硬件加速对PorterDuffXfermode的影响

 

跑的版本minSdk=33

编译SDK=34

import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffXfermode
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView


class MyView : AppCompatImageView {
    private var mBmp: Bitmap? = null

    private val H = 400f
    private val W = 400f

    private var closeGPU = false //true 关闭硬件加速。

    constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {
        if (closeGPU) {
            setLayerType(LAYER_TYPE_SOFTWARE, null)
        }

        mBmp = Bitmap.createBitmap(W.toInt(), H.toInt(), Bitmap.Config.ARGB_8888)
        setImageBitmap(mBmp)
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)

        val paint = Paint()
        circleTarget(canvas, paint)
        rectSource(canvas, paint)
    }

    private fun circleTarget(c: Canvas, paint: Paint) {
        paint.style = Paint.Style.FILL
        paint.isAntiAlias = true
        paint.color = Color.RED
        val radius = W / 2 // 或者 H/2 ,因为是正方形。
        c.drawCircle(W / 2, H / 2, radius, paint)
    }

    private fun rectSource(c: Canvas, paint: Paint) {
        paint.style = Paint.Style.FILL
        paint.isAntiAlias = true
        paint.color = Color.BLUE

        val mode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
        paint.xfermode = mode

        val left: Float = W / 2
        val top: Float = H / 2
        val right: Float = W
        val bottom: Float = H
        c.drawRect(left, top, right, bottom, paint)
    }
}

 

 

没有关闭硬件加速,closeGPU=false:

505ee603f49c4a38ae81e5d49657a701.png

 

 

 

关闭硬件加速后,closeGPU=true:

540dc5641ac94116b5d5f52d11738161.png

 

 

具体到PorterDuffXfermode,关闭硬件加速,跑出来的结果符合预期。

 

 

 

 

 

Android图形图像处理:马赛克(Mosaic)效果_android对图片部分区域做马赛克-CSDN博客文章浏览阅读5.8k次。以图形图像界经典的实验例图Lenna为例,当手指在图片上滑过后,形成马赛克的: 写一个MosaicView继承自AppCompatImageView:package com.zhangphil;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Can..._android对图片部分区域做马赛克https://blog.csdn.net/zhangphil/article/details/87812785

Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧-CSDN博客文章浏览阅读521次,点赞8次,收藏8次。CPU返回后,会直接将GraphicBuffer提交给SurfaceFlinger,告诉SurfaceFlinger进行合成,但是这个时候GPU可能并未完成之前的图像渲染,这时候就牵扯到一个同步,Android中,用的是Fence机制,SurfaceFlinger合成前会查询Fence,如果GPU渲染没有结束,则等待GPU渲染结束,GPU结束后,会通知SurfaceFlinger进行合成,SF合成后,提交显示,最终完成图像的渲染显示。https://zhangphil.blog.csdn.net/article/details/138614281

 Android硬件加速hardwareAccelerated支持/不支持的绘图接口-CSDN博客文章浏览阅读599次,点赞6次,收藏19次。三Buffer轮转情况下,基本不会有这种情况的发生,渲染线程一般在 dequeueBuffer 时,都可以顺利拿到可用的 Buffer (如果 dequeueBuffer 本身耗时那就也会拉长时间)。在Android早期的版本,由于硬件制造商差异大,增加了这一开关,但随着Android系统版本的迭代,以及硬件技术水平提升,现有的绝大多数Android手机硬件层面均已支持硬件加速(GPU渲染),Android本身也只有有限几个接口不支持硬件加速。https://blog.csdn.net/zhangphil/article/details/138502494

 

相关推荐

  1. 人工智能社会影响

    2024-06-06 17:48:03       44 阅读
  2. 【IVA】加速计算中常用硬件

    2024-06-06 17:48:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 17:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 17:48:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 17:48:03       82 阅读
  4. Python语言-面向对象

    2024-06-06 17:48:03       91 阅读

热门阅读

  1. Golang获取文件名扩展名/后缀

    2024-06-06 17:48:03       26 阅读
  2. Nginx的负载均衡(加权轮询)

    2024-06-06 17:48:03       26 阅读
  3. 【Power Compiler手册】6.反标翻转活动

    2024-06-06 17:48:03       34 阅读
  4. C++基础-编程练习题和答案(数组)

    2024-06-06 17:48:03       26 阅读
  5. 查看电脑品牌

    2024-06-06 17:48:03       36 阅读
  6. Android基础-AndroidManifest.xml详解

    2024-06-06 17:48:03       25 阅读
  7. 说明 1px、1em、1rem、1vw、1vh 的区别

    2024-06-06 17:48:03       80 阅读
  8. springboot中使用RestTemplate 请求http接口

    2024-06-06 17:48:03       32 阅读
  9. 上传code至github的步骤

    2024-06-06 17:48:03       29 阅读
  10. 电脑问题和解决方法记录

    2024-06-06 17:48:03       24 阅读
  11. MyEclipse 新手使用教程

    2024-06-06 17:48:03       35 阅读