我正在使用SurfaceView的画布,但不太明白画布是如何处理其绘制调用的。画布是由位图支持的,因此我绘制的东西直接保存为位图中的像素值。
我不明白的是:Canvas允许缩放、平移和“屏幕外”绘图等操作,但所有这些操作都需要一个动态大小的位图(因为我可以平移到任何我想要的地方),这怎么可能呢?我还注意到,当缩放绘制的东西,如线条和圆圈时,它们根本不会得到像素化,这是奇怪的,如果它们首先写在位图上,然后大幅缩放。
现在我通过直接修改绘制调用中的变量来实现缩放和平移。跳过这个并使用canvas的缩放和平移函数是不是更好?
当我把非位图形状放大很多时,这对它们的图像质量意味着什么?
我可以在坐标系中“屏幕外”绘制并将其转换回来而不出现任何问题吗?
2条答案
按热度按时间iyfamqjs1#
也可以使用
Matrix()
缩放形状,例如缩放你的路径,给任何缩放点,也许
1.25f
和形状将改变自己。vfh0ocws2#
android画布是否在位图上绘制?
答案是肯定和否定的。
这取决于,它可以由位图支持,或者它可以是硬件渲染,可能不使用位图,它也可以使用PDF文档,如Android的PdfDocument类所使用的。
Android canvas使用Skia图形库来进行绘制。
对于“当我大幅放大非位图形状时,这对它们的图像质量意味着什么?”
根据记忆,如果您的Paint启用了抗锯齿,则质量相当不错。
对于“我是否可以安全地在“屏幕外”的坐标上绘制并将它们转换回来而没有任何问题?”
是的,但有一个限制,因为有大小限制,特别是如果使用位图支持的画布,因为位图是内存饥饿和虚拟机有一个有限的内存量,它可以使用。
显然,如果使用缩放和用户输入转换,那么您可能需要处理调整用户输入坐标。