Я думаю, что делаю это медленным способом:
private fun copyFrameToChannels(
frame: Frame,
height: Int,
width: Int,
channelB: IntArray,
channelG: IntArray,
channelR: IntArray
) {
val bgrIdx: UByteIndexer = frame.createIndexer()
for (y in 0 until height.toLong()) {
for (x in 0 until width.toLong()) {
val location = (y * width + x).toInt()
// BGR
channelB[location] = bgrIdx.get(y, x, 0)
channelG[location] = bgrIdx.get(y, x, 1)
channelR[location] = bgrIdx.get(y, x, 2)
}
}
bgrIdx.release()
}
Мне нужно получить минимальное и максимальное значения для каждого канала и обработать все значения в пределах канала, но это выглядит как дополнительнаякопировать. Я шел в надежде на val reds:IntArray = frame.getRedChannel()
. Я могу получить «Image» (просто nio.Buffer) с помощью val img = frame.image[0]
Даже если это DirectByteBuffer, .array()
не поддерживается.
Есть ли способ сделать массовый / быстрый "получить буфер с длиной шага 3", как frame.image[0].efficientEntireChannelToArray(numChannels=3, sourceChannel=2, targetArray=myReds)
?