Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何提高像素绘制过程性能?_Android_Performance_Kotlin - Fatal编程技术网

Android 如何提高像素绘制过程性能?

Android 如何提高像素绘制过程性能?,android,performance,kotlin,Android,Performance,Kotlin,也许这对你们大多数人来说都是一个简单的问题,但在Kotlin中是否有其他的循环计数器。我需要它来提高性能。我在模板中使用嵌套循环只是为了检查这种方法是否合理,现在我想加快速度 我的循环如下所示: val rectF = RectF() for (y in 0 until 256) { for (x in 0 until 256) { pos = getIndexOfMax(results!![0][y][x]) if (pos > 0) {

也许这对你们大多数人来说都是一个简单的问题,但在Kotlin中是否有其他的循环计数器。我需要它来提高性能。我在模板中使用嵌套循环只是为了检查这种方法是否合理,现在我想加快速度

我的循环如下所示:

val rectF = RectF()
for (y in 0 until 256) {
    for (x in 0 until 256) {
       pos = getIndexOfMax(results!![0][y][x])
       if (pos > 0) {
          rectF.left = (x / 256f * w) - xw
          rectF.top = (y / 256f * h) - xh
          rectF.right = (x / 256f * w) + xw
          rectF.bottom = (y / 256f * h) + xh
          canvas.drawRect(rectF, boxPaint)
       }
                    
     }
}

正如您所看到的,“x”和“y”在这里是计算盒子位置所必需的。我需要加快一点(或更多)绘制过程,但我不知道如何在这里使用
.map
,因为我只看到了使用
.map
foreach
循环的示例。很抱歉,我不像Kotlin的老手,我以前使用嵌套循环,因为这些循环不会造成显著的性能损失。

这是迭代的最快方法。您可以通过避免执行两次浮点除法操作来优化现有的内容。您可以将画布变换移动半个像素,这样就不必减去半个像素的宽度…只需为右侧和底部添加完整的像素宽度。但是,我认为使用位图对象,然后将位图绘制到画布上可能会快得多。绘制的每个矩形有四个顶点,每个顶点都有颜色和位置信息。四个顶点中的每一个都必须乘以一个矩阵才能将其定位到矩阵上。这是一个非常低效的方式做像素艺术。位图允许您以有效的方式修改单个像素。许多Kotlin标准库集合迭代函数(如
map()
)应用于性能关键的任何功能。他们创建一个全新的列表,在修改时将所有内容从一个集合复制到另一个集合。
MutableList
中修改列表内容的功能正常。而且,
forEach
很好,因为它不会创建新列表。