Kotlin-读取最低有效位(隐写术)



我正在创建一个程序,该程序可以使用Kotlin读取图像文件的最低有效位。我有一个读取文件中字节的函数,但我不确定如何实际打印consumerArray函数中的字节。

我的目标是打印图像中最不重要的部分。

override fun run() {
val buff = ByteArray(1230)
File("src\main\kotlin\day01_least_significant_bit_steganography\eksempel_bakgrunnsbilde.png").inputStream().buffered().use { input ->
while(true) {
val sz = input.read(buff)
if (sz <= 0) break
///at that point we have a sz bytes in the buff to process
consumeArray(buff, 0, sz)
}
}
} // run
private fun consumeArray(buff: ByteArray, i: Int, sz: Int) {
println("??")
} // consumeArray

在Kotlin 1.4+中,您可以使用.takeLowestOneBit((方法获得任何字节的最低有效位。

可能会发生它等于零的情况,所以你需要迭代byteArray,直到满足任何非零的最低有效位(我相信这就是"byteArray最低有效位"下的意思(:

var lowestBit: Byte = 0
for (index in sz - 1 downTo 0) {
val currentLowestBit = buff[index].takeLowestOneBit()
if (currentLowestBit != 0.toByte()) {
lowestBit = currentLowestBit
break
}
}

注意,它将打印缓冲区的最低有效位,而不是整个图像(如果它比缓冲区大(

最新更新