android canvas可以在位图上绘图吗?

xvw2m8pv  于 2022-12-21  发布在  Android
关注(0)|答案(2)|浏览(127)

我正在使用SurfaceView的画布,但不太明白画布是如何处理其绘制调用的。画布是由位图支持的,因此我绘制的东西直接保存为位图中的像素值。
我不明白的是:Canvas允许缩放、平移和“屏幕外”绘图等操作,但所有这些操作都需要一个动态大小的位图(因为我可以平移到任何我想要的地方),这怎么可能呢?我还注意到,当缩放绘制的东西,如线条和圆圈时,它们根本不会得到像素化,这是奇怪的,如果它们首先写在位图上,然后大幅缩放。
现在我通过直接修改绘制调用中的变量来实现缩放和平移。跳过这个并使用canvas的缩放和平移函数是不是更好?
当我把非位图形状放大很多时,这对它们的图像质量意味着什么?
我可以在坐标系中“屏幕外”绘制并将其转换回来而不出现任何问题吗?

iyfamqjs

iyfamqjs1#

也可以使用Matrix()缩放形状,例如

private fun scalePath(path: Path, scale: Float) {
    val scaleMatrix = Matrix()
    val rectF = RectF()
    path.computeBounds(, true)
    scaleMatrix.setScale(scale, scale, rectF.centerX(), rectF.centerY())
    path.transform(scaleMatrix)
}

缩放你的路径,给任何缩放点,也许1.25f和形状将改变自己。

vfh0ocws

vfh0ocws2#

android画布是否在位图上绘制?
答案是肯定和否定的。
这取决于,它可以由位图支持,或者它可以是硬件渲染,可能不使用位图,它也可以使用PDF文档,如Android的PdfDocument类所使用的。
Android canvas使用Skia图形库来进行绘制。
对于“当我大幅放大非位图形状时,这对它们的图像质量意味着什么?”
根据记忆,如果您的Paint启用了抗锯齿,则质量相当不错。
对于“我是否可以安全地在“屏幕外”的坐标上绘制并将它们转换回来而没有任何问题?”
是的,但有一个限制,因为有大小限制,特别是如果使用位图支持的画布,因为位图是内存饥饿和虚拟机有一个有限的内存量,它可以使用。
显然,如果使用缩放和用户输入转换,那么您可能需要处理调整用户输入坐标。

相关问题