Android ndk android.graphics.Canvas中使用的算法
我试图找出绘图算法在使用什么,尤其是Android ndk android.graphics.Canvas中使用的算法,android-ndk,android-canvas,Android Ndk,Android Canvas,我试图找出绘图算法在使用什么,尤其是drawLine和drawrick。我已经设法找到了,但我无法理解每次都使用哪种算法 有什么想法吗?总结评论: 绘图功能至少有两种实现,一种是纯软件(the)实现,另一种是启用时使用GPU实现 实现是用C++编写的,而不是java编写的。因为它必须考虑到绘制笔划宽度等特性,所以代码可能不像您发现的那样简单 在C++中,给定算法的实现速度比用java编程语言编写时快很多。这是一个宗教问题,为了消除“Java很慢”的概念,定期抛出各种基准测试。我认为C++有点表
drawLine
和drawrick
。我已经设法找到了,但我无法理解每次都使用哪种算法
有什么想法吗?总结评论:
- 绘图功能至少有两种实现,一种是纯软件(the)实现,另一种是启用时使用GPU实现
绘制
笔划宽度等特性,所以代码可能不像您发现的那样简单
在C++中,给定算法的实现速度比用java编程语言编写时快很多。这是一个宗教问题,为了消除“Java很慢”的概念,定期抛出各种基准测试。我认为C++有点表达力强,允许你更准确地告诉编译器你想要它做什么,尤其是Android上,NDK C++编译器比Dalvik或ART编译器更好。
drawLine
和drawCircle
+其他方法,所以我开始实现Bresenham的line+circle算法。但是,视觉和性能结果不如API的
one。这就是为什么我想知道为了实现这个特定的目标,使用了哪种算法,谁给出了很好的结果。请注意,我目前正在Java
中实现这些算法,而不是通过NDK
在C\C++
中实现这些算法。这是否在性能上有意义?SKIa版本是用C++编写的,硬件加速版本是由GPU来执行的。用Java编写的代码的性能是无法比拟的。通用图形库必须处理您可以使用绘画进行的所有操作(笔划宽度、点画等),因此您不会总是找到类似Bresenham算法的直接实现。如果您想查看Skia代码,请参见:。对于快速绘制线条的代码,请使用google Michael Abrash。@fadden“用Java编写的代码的性能是无法接近的”
。这是真的,考虑到我已经用Java实现了Bresenham的算法,而且性能还差得远。。你可以根据上面的评论写一个答案,所以我接受这个答案。我也检查了迈克尔·艾布拉什的情况,我发现了。如果我理解正确的话,他还建议使用Bresenham的算法*编辑:如果您能解释一下为什么与C++
相比,Java性能如此之低,我将不胜感激,谢谢