代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

在主位图的子区域上执行画布绘制的优化方法

  •  2
  • Cheok Yan Cheng  · 技术社区  · 7 年前

    主位图大小大于自定义视图的绘图区域。目前,我的代码是这样的。虽然有效,但我觉得应该有办法进一步优化。

    // Code in a custom View
    private fun getBitmap(): Bitmap {
        val resources = context.resources
    
        // Creating a larger master bitmap.
        val screenWidth = resources.getDisplayMetrics().widthPixels;
        val screenHeight = resources.getDisplayMetrics().heightPixels;
        val masterBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888)
        val masterCanvas = Canvas(masterBitmap)
        masterCanvas.drawColor(Color.WHITE)
    
        // Creating a smaller child bitmap.
        val childBitmap = Bitmap.createBitmap(
                masterBitmap,
                (screenWidth-width) shr 1,
                (screenHeight-height) shr 1,
                width,
                height
        )
    
        // Perform drawing on smaller child bitmap.
        val childCanvas = Canvas(childBitmap)
        draw(childCanvas)
    
        // Copy the smaller child bitmap back to larger master bitmap.
        masterCanvas.drawBitmap(
                childBitmap,
                ((screenWidth-width) shr 1).toFloat(),
                ((screenHeight-height) shr 1).toFloat(),
                Paint()
        )
    }
    

    因此,该步骤可概括如下

    1. 创建较大的主位图。
    2. 在较小的子位图上执行绘制。

    我在想,有没有办法消除 ?

    Bitmap.createBitmap 将使用新分配的内存创建位图的新实例。

    我想要的步骤是

    我在想,有什么API可以让我

    0 回复  |  直到 7 年前