Kotlin 隐写术场景下如何读取并打印图片文件的最低有效位
Kotlin 图片最低有效位(LSB)打印实现方案
核心逻辑说明
要提取字节的最低有效位,只需对单个字节执行按位与0x01操作即可:二进制中0x01仅最后一位为1,运算结果直接对应该字节的最低位值(0或1)。
consumeArray 函数实现代码
版本1:输出连续的01位流(适合后续隐写信息提取)
private fun consumeArray(buff: ByteArray, i: Int, sz: Int) { // 遍历当前缓冲区的有效字节范围 for (index in i until i + sz) { // 提取当前字节的最低有效位 val lsb = buff[index].toInt() and 0x01 // 连续打印不换行,拼接成完整位流 print(lsb) } }
版本2:逐字节打印对应最低有效位(适合调试排查问题)
private fun consumeArray(buff: ByteArray, i: Int, sz: Int) { for (index in i until i + sz) { val lsb = buff[index].toInt() and 0x01 println("字节索引$index 最低有效位:$lsb") } }
补充说明
如果仅需要提取图片像素区域的最低有效位,可以跳过PNG文件前8字节的固定签名头,以及后续的IHDR等非像素数据块,直接处理IDAT块内容即可,避免打印文件头无关位信息。
内容的提问来源于stack exchange,提问作者Europa
相关产品推荐
相关产品推荐

