- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要快速绘制线条(~10k/帧是常见数量)。绘制这些线条的已知方法(单线程、抗锯齿):
drawLines()
带有硬件加速的 Canvas
。速度很快,但线条变得抗锯齿模糊(见下图)。此外,在 KitKat
上,如果点数组包含 NaN
值drawLines()
与软件呈现 Canvas
。速度适中,没有模糊,KitKat
问题依然存在for (int i ...) drawLine()
使用硬件加速 Canvas
。列出的三个中最慢的,没有模糊,没有 KitKat
问题有些事情告诉我有几个简单的技巧可以避免抗锯齿和 KitKat
问题,从而保持高性能
对于第一个 - 例如,是否可以绘制那些未抗锯齿的线条,然后对整个位图应用抗锯齿(最快选项的变体)?
对于第二个 - 没有想法,只有一些处理 NaN
的微调方法。无论如何,KitKat
是一个相对较新和流行的 - 它的问题应该有一些解决方案 - 否则该平台使用起来会很头疼
UPD2:
这个问题包含两个不同的问题:
- 使用硬件加速和任意(但有效)输入的 drawLines()
时抗锯齿
- 如果输入包含 NaN
drawLines()
拒绝在
KitKat
上绘制任何内容
drawLines()
是焦点,因为它比使用 drawLine()
一条一条地绘制线条快方式
另外,下图是对同一个数组应用drawLines()
两次的结果:
canvas.drawLines(toDraw, 0, qty, paint);
canvas.drawLines(toDraw, 2, qty-4, paint); //qty % 4 == 0
更新:
这就是模糊的样子。它在线路的末端
最佳答案
这里的话题很乱;让我们试着解开它们。
线条“模糊”
根据我们的聊天记录,此问题只会在您开始绘制长度 < 1 像素的线段时出现。值得注意的是,drawLines()
将一次分割所有线段,并且由于集合中存在 <1px 线,分割器可能会折叠。这就是使用单独的 drawLine()
命令看不到“模糊”的原因;每个 drawLine()
仅分割您给它的部分,因此错误仅限于那些超小的部分(无论如何都太小了)。 这里的修复是添加一些逻辑来从你的集合中删除 <1px 长度的线,这将解决这个问题,并允许你使用 drawLines()
比其他方法更快。
NaN 问题
NaN 会在 GPU 上引起很多问题,因此如果它们包含在您的绘图列表中,您就会看到问题是有道理的。 (很像导致模糊问题的 <1px 线段)。同样,这就是为什么使用单独的 drawLine()
命令看不到视觉问题; NaN 正在破坏 tesselator,并将其仅隔离到那些单个段,而不是整个行列表。同样,此处的解决方案将指向过滤列表以删除 NaN。
性能
鉴于镶嵌一条线的开销明显大于 CPU 检查以丢弃一条坏线,因此添加一个预处理以删除 NaN 和 <1px 线应该在您的性能预算之内是有意义的,并且会消除您看到的视觉问题。
关于android - 在 Android Canvas : dealing with antialiasing and KitKat's peculiarities 中快速绘制大量线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126549/
我正在尝试制作一个简单的交易或无交易游戏。我还没有真正取得进展,但希望我能完成它。到目前为止,我只使用 JButtons 制作了一个 JFrame,当您单击按钮时,就会出现金额。接下来我要做的是,当您
我有一个 ASP.NET MVC 3 网站,它通过 JSON 与我的 iOS 应用程序通信。作为 JSON 响应中发送的对象的一部分,我的日期格式为 yyyy-MM-dd HH:mm:ss ZZZ,输
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Division/RegExp conflict while tokenizing Javascript 我
据我了解 Intel® 64 and IA-32 ArchitecturesSoftware Developer’s ManualVolume 3 (3A, 3B, 3C & 3D):System P
在以下代码中,我尝试处理QThread。在此可执行示例中,有三个按钮:第一个用于启动,第二个用于停止,第三个用于关闭。好吧,当我开始执行任务时,它的运行就像一个魅力。 但是,当我想停止while循环时
我正在尝试使用react和meteor将表单数据提交到数据库。 我有一个用于表单的 AddDeal 组件和一个用于交易的集合,以及其中的一个方法。 错误 Exception while simulat
使用 Firebase(本例中为 Firebase 云功能)时,我们必须为每个字节的带宽付费。 所以,我想知道我们如何处理有人以某种方式找到我们的端点然后故意连续请求(通过脚本或工具)的情况? 我在互
根据 svick 的建议我创建了一个小类,其目的是按顺序运行任务,也就是说,它在 ThreadPool 上安排它们,但它确保它们按照提交的顺序一个接一个地执行。它看起来像这样: class Seque
我被相对布局卡住了两天..这是我的线性布局屏幕截图 所以很好。但现在我想在 map 上的某个地方添加刷新按钮,但我发现线性布局是不可能的。所以我尝试了相对布局,但甚至无法获得上面的屏幕。我的页脚布局总
我尝试用 HTML 颜色制作枚举。一开始我认为它会很好很简单,但我碰壁了。颜色可以定义为名称:moroon、gray、grey(相同值)或 RGBA 字符串 #00000000。我从: enum HT
我正在使用grafana获取zabbix代理数据。 我只需匹配以下值之一: Free space on C: (Percentage) Free Space on / (Percentage) 该表达
这个问题在这里已经有了答案: How to define a typedef struct containing pointers to itself? (2 个答案) 关闭 9 年前。 是否有办法
假设我们有一个将在 (c#) 代码中广泛使用的类,例如 Log 类。假设日志将条目写入特定目录中的 XML 文件。现在,强制用户使用所需信息初始化类的一种尝试是将默认(无参数)构造函数设为私有(pri
这里有几个关于我想弄清楚的示例场景: 假设某杂货店商品列为 4 for 5.00。根据列出的交易,我们如何计算每件商品的单价? 一个简单的解决方案是将总价除以列出的数量,在这种情况下,您将得到 1.2
如何处理内联汇编函数中的引用?我正在尝试这个 void foo(int& x) { __asm mov x, 10 } int main() { int x = 0; foo(
如果您有两个足够相似的接口(interface),您希望通过相同的逻辑来运行它们,那么处理这种情况的正确方法是什么: interface DescriptionItem { Descripti
在编写加密实用程序类时,我遇到了以下方法的问题: public static void destroy(Key key) throws DestroyFailedException { if(
可能已经问过了,但我找不到它。这里有 2 个常见的情况(对我来说,在编程 Rails 时......)用 ruby 编写是令人沮丧的: "a string".match(/abc(.+)abc/)
我正在阅读 varargs heap pollution而且我真的不明白 varargs 或不可具体化类型将如何对没有通用性的情况下不存在的问题负责。确实,我可以很容易地替换 public stati
我需要定义一个函数。它需要像这样工作:。另外,老实说,这是一种练习;我被建议使用拉链和自行车。。我已经试了三个半小时来解决这个问题,但还是没有找到解决方案。。问:你能给我一个提示,如何处理这个问题吗?
我是一名优秀的程序员,十分优秀!