android - 在主位图的子区域上执行画布绘制的优化方式
问题描述
目前,我有一个自定义视图,它需要在主位图的子区域上绘制自己。
主位图大小大于自定义视图的绘图区域。目前,这就是我的代码的样子。虽然它有效,但我觉得应该有一种方法可以进一步优化它。
// 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()
)
}
因此,步骤可以总结如下
- 创建更大的主位图。
- 创建一个较小的子位图。
- 在较小的子位图上执行绘图。
- 将较小的子位图复制回较大的主位图。
我想知道,有没有办法消除第 4 步:将较小的子位图复制回较大的主位图。?
是否可以创建一个子位图,其数据存储区域直接共享主位图的相同数据存储区域?作为,Bitmap.createBitmap
将使用新分配的内存创建一个新的 Bitmap 实例。
我想要的步骤是
- 创建更大的主位图。
- 通过直接映射到较大的主位图来创建较小的子位图。
- 在较小的子位图上执行绘图。这将在子位图绘制过程中立即影响较大的主位图。
我想知道,是否有任何 API 使我能够通过直接映射到较大的主位图来创建较小的子位图。?
解决方案
推荐阅读
- python - 无法在 Python 中使用 mindsdb 库
- reactjs - 如果在内容之外单击,则 React Modal 关闭
- oracle - su:尽管在 oracle 容器中是 root,但权限被拒绝
- python - 如何在某个值之后在单链表中插入值?
- spring - JMS队列中没有负载时消费者数量不减少
- java - 关于 Lambda.... 分号
- iphone - Facebook 登录按钮需要点击两次才能在 Safari / iPhone 中工作,为什么?
- here-api - 如何在 Here Maps API 中获取某个区域的卡车限制?
- c# - WPF 一个 ViewModel 作为 MainWindow 的属性,如何从页面正确访问 ViewModel?
- java - 更新会话管理器