Java 从图像获取/设置位值

Java 从图像获取/设置位值,java,embed,decode,steganography,Java,Embed,Decode,Steganography,这个问题就是基于这个 有人能解释一下这些台词的含义吗: private int getBitValue(int n, int location) { int v = n & (int) Math.round(Math.pow(2, location)); return v==0?0:1; } 及 getBitValue只获取指定位的值(在特定位置上) setBitValue设置匹配特定位置上的位值 这些getter/setter方法通常用于图像处理,也就是说,

这个问题就是基于这个

有人能解释一下这些台词的含义吗:

private int getBitValue(int n, int location) {
      int v = n & (int) Math.round(Math.pow(2, location));
      return v==0?0:1;
 }


getBitValue只获取指定位的值(在特定位置上)

setBitValue设置匹配特定位置上的位值

这些getter/setter方法通常用于图像处理,也就是说,如果您有一个musk,并且希望更改特定的位值


差不多没什么

getBitValue只获取指定位的值(在特定位置上)

  int v = n & (int) Math.round(Math.pow(2, location));
setBitValue设置匹配特定位置上的位值

这些getter/setter方法通常用于图像处理,也就是说,如果您有一个musk,并且希望更改特定的位值


差不多没什么

getBitValue只获取指定位的值(在特定位置上)

  int v = n & (int) Math.round(Math.pow(2, location));
setBitValue设置匹配特定位置上的位值

这些getter/setter方法通常用于图像处理,也就是说,如果您有一个musk,并且希望更改特定的位值


差不多没什么

getBitValue只获取指定位的值(在特定位置上)

  int v = n & (int) Math.round(Math.pow(2, location));
setBitValue设置匹配特定位置上的位值

这些getter/setter方法通常用于图像处理,也就是说,如果您有一个musk,并且希望更改特定的位值

差不多没什么

  int v = n & (int) Math.round(Math.pow(2, location));
Math.pow(2,位置)
将2提升到给定的功率。这将被舍入并转换为整数。在二进制中,如果
location==0
,则为00000001;如果
location==1
,则为00000010;如果
location==2
,则为00000100;等等。(如果
1,则更好。)
Math.pow(2,location)
将2提升到给定的幂。这是四舍五入并转换为整数。在二进制中,如果
location==0
,这将是00000001;如果
location==1
,这将是00000010;如果
location==2
,这将是00000100。(如果
1,则更好。)
Math.pow(2,location)
将2提升到给定的幂。这是四舍五入并转换为整数。在二进制中,如果
location==0
,这将是00000001;如果
location==1
,这将是00000010;如果
location==2
,这将是00000100。(如果
1,则更好。)

Math.pow(2,location)
将2提升到给定的幂。这将被舍入并转换为整数。在二进制中,如果
location==0,这将是00000001;如果
location==1,这将是00000010;如果
location==2,这将是00000100,等等。(最好是
1抱歉没有说清楚。我想知道这两种方法中每一行的含义,以及为什么
setBitValue(int n,int location,int bit)
需要做
getBitValue(n,location)
再次。抱歉没有说清楚。我想知道这两种方法中每一行的含义,以及为什么
setBitValue(int n,int location,int bit)
需要做
getBitValue(n,location);
再次。抱歉没有说清楚。我想知道这两种方法中每一行的含义,以及为什么
setBitValue(int n,int location,int bit)
需要再做一次
getBitValue(n,location);
很抱歉没有说清楚。我想知道这两种方法中每一行的含义,以及为什么
setBitValue(int n,int location,int bit)
需要做
getBitValue(n,location)
再次。这是一个非常清楚的解释。我需要回去再次查看代码,并尝试理解它。谢谢大家。为什么在方法
中使用setBitValue(int n,int location,int bit)
需要再次执行
getBitValue
,这次使用的是rgb值,但消息长度。@JarekHuang这正是他们实现它的方式。要设置位值,此算法获取当前位值,然后查看三种不同情况:(1)当前位值=期望值,不执行任何操作;(2)当前值为0,期望值为1;(3)当前值为1,期望值为0。有一些方法可以在不使用
getBitValue
的情况下实现这一点:
result=(n&~toggle)|((bit==1)?toggle:0)
。这是一个非常清楚的解释。我需要再次查看代码,并尝试理解它。谢谢大家。为什么使用
setBitValue方法(int n,int location,int bit)
需要再次执行
getBitValue
,这次使用的是rgb值,但消息长度。@JarekHuang这正是他们实现它的方式。要设置位值,此算法获取当前位值,然后查看三种不同情况:(1)当前位值=所需值,不执行任何操作;(2)当前值为0,期望值为1;(3)当前值为1,期望值为0。有几种方法可以实现这一点,而无需使用
getBitValue
result=(n&~toggle)|((bit==1)?toggle:0)
,例如。这是一个非常清楚的解释。我需要再回头看看代码,并试着理解它。谢谢大家。为什么在方法
setBitValue(int n,int location,int bit)中
需要再次执行
getBitValue
,这次使用的是rgb值,但消息长度。@JarekHuang这正是他们实现它的方式。要设置位值,此算法获取当前位值,然后查看三种不同情况:(1)当前位值=期望值,不执行任何操作;(2)当前值为0,期望值为1;(3)当前值为1,期望值为0。有一些方法可以在不使用
getBitValue
的情况下实现这一点:
result=(n&~toggle)|((bit==1)?toggle:0)
。这是一个非常清楚的解释。我需要再次查看代码,并尝试理解它。谢谢大家。为什么使用
setBitValue方法(int n,int location,int bit)
需要再次执行
getBitValue
,这一次使用的是rgb值,但使用的是消息长度。@JarekHuang这正是他们实现它的方式。要设置
if(bv == bit)
    return n;
if(bv == 0 && bit == 1)
    n |= toggle;
else if(bv == 1 && bit == 0)
    n ^= toggle;