Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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
Java 如何在Kotlin中加速将Short数组转换为位图_Java_Android_Performance_Kotlin - Fatal编程技术网

Java 如何在Kotlin中加速将Short数组转换为位图

Java 如何在Kotlin中加速将Short数组转换为位图,java,android,performance,kotlin,Java,Android,Performance,Kotlin,我使用供应商API从深度传感器接收数据。该API以短路数组的形式提供图像,但来自传感器的原始数据是uint8数组,这导致图像损坏,我需要重新对齐数组以正确显示图像。此外,我必须使这个图像的颜色,以显示这个图像的深度。这种操作会占用大量CPU时间,并且每秒只能显示很少的帧。有没有办法提高这种转换的速度 我从ImageView迁移到SurfaceView,以便在UI线程上花费更少的时间,并且在单独的线程上执行此代码。现在UI已经响应了,但仍然需要大约200-300毫秒才能将此帧转换为int数组并对其

我使用供应商API从深度传感器接收数据。该API以短路数组的形式提供图像,但来自传感器的原始数据是uint8数组,这导致图像损坏,我需要重新对齐数组以正确显示图像。此外,我必须使这个图像的颜色,以显示这个图像的深度。这种操作会占用大量CPU时间,并且每秒只能显示很少的帧。有没有办法提高这种转换的速度

我从ImageView迁移到SurfaceView,以便在UI线程上花费更少的时间,并且在单独的线程上执行此代码。现在UI已经响应了,但仍然需要大约200-300毫秒才能将此帧转换为int数组并对其着色,然后将其转换为位图

    private fun getColors(value: Int, max: Int): IntArray {
        val rgb = IntArray(3)

        val range = value * 7 * 256 / max

        if (range < 256) {
            rgb[2] = range % 256
        } else if (range < 2 * 256) {
            rgb[1] = range % 256
            rgb[2] = 255
        } else if (range < 3 * 256) {
            rgb[1] = 255
            rgb[2] = 255 - range % 256
        } else if (range < 4 * 256) {
            rgb[0] = range % 256
            rgb[1] = 255
            rgb[2] = 0
        } else if (range < 5 * 256) {
            rgb[0] = 255
            rgb[1] = 255 - range % 256
        } else if (range < 6 * 256) {
            rgb[0] = 255
            rgb[1] = 0
            rgb[2] = range % 256
        } else {
            rgb[0] = 255
            rgb[1] = if(range > 7*255) 255 else range % 256
            rgb[2] = 255
        }

        return rgb
    }

    private fun updateDepthImage(depth: DepthImage): Bitmap {
        val table = depth.data //array of shorts
        val inttab = IntArray(table.size / 2)


    // Correct align of the table and convert it to table of Int 
        for (i in 0 until table.size / 2) {
            var sum = (table[2 * i].toInt() and 0xff) + (table[2 * i + 1].toInt() and 0xFF shl 8)//*255/2367;
            if (sum > 10000) {
                sum = 10000
            }
            inttab[i] = sum
        }
        val max = 10000

    // Color correction
        for (i in inttab.indices) {
            val rgb = getColors(inttab[i], max)
            val color = -0x1000000 or (rgb[0] shl 16) or (rgb[1] shl 8) or rgb[2]
            inttab[i] = color
        }

        val bitmap = Bitmap.createBitmap(inttab, 640, 480, Bitmap.Config.ARGB_8888)

        return bitmap
    }
private fun getColors(值:Int,最大值:Int):IntArray{
val rgb=阵列(3)
val范围=值*7*256/最大值
如果(范围<256){
rgb[2]=范围%256
}else if(范围<2*256){
rgb[1]=范围%256
rgb[2]=255
}else if(范围<3*256){
rgb[1]=255
rgb[2]=255-范围%256
}else if(范围<4*256){
rgb[0]=范围%256
rgb[1]=255
rgb[2]=0
}else if(范围<5*256){
rgb[0]=255
rgb[1]=255-范围%256
}else if(范围<6*256){
rgb[0]=255
rgb[1]=0
rgb[2]=范围%256
}否则{
rgb[0]=255
rgb[1]=如果(范围>7*255)255其他范围%256
rgb[2]=255
}
返回rgb
}
private fun UpdatedPthimage(深度:深度图像):位图{
val table=depth.data//shorts数组
val inttab=IntArray(表1.size/2)
//更正表格的对齐方式并将其转换为Int表格
用于(0中的i,直到表1.size/2){
var sum=(表[2*i].toInt()和0xff)+(表[2*i+1].toInt()和0xff shl 8)//*255/2367;
如果(总和>10000){
总和=10000
}
inttab[i]=总和
}
val最大值=10000
//颜色校正
对于(i在inttab.索引中){
val rgb=getColors(inttab[i],最大值)
val color=-0x1000000或(rgb[0]shl 16)或(rgb[1]shl 8)或rgb[2]
inttab[i]=颜色
}
val bitmap=bitmap.createBitmap(inttab,640480,bitmap.Config.ARGB_8888)
返回位图
}