java如何在Kotlin中加速从短数组到位图的转换
我使用供应商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
}
共 (0) 个答案