图像处理_二进制位转换1

  • Post author:
  • Post category:其他




图像处理_二进制位转换

今天学习了rgb三原色以及位运算,来写篇笔记



图像原理:

  • 图像是由

    像素点

    组成的点矩阵

  • 每个像素点可以表达一种颜色(一个颜色方块)

  • 像素的颜色值

    • R(红)G(绿)B(蓝)每个值的范围是(0-255),所以每个颜色都是1byte

    • 黑色:0,0,0

    • 白色:255,255,255

    • 红色:255,0,0

二进制:

  • 1个bit有两种取值: 0/1

  • 1int = 4byte = 32bit

现在我们的要求是要存储这三原色,如果用三个数组的话感觉太过麻烦,下面我们来介绍一种思想,将3个byte组合成一个int

现在我们举一个例子:

RGB值为(130 210 85)

130: 1000 0010

210: 1101 0010

85 : 0101 0101

1个int是8byte,也就是

0000 0000

0000 0000

0000 0000

0000 0000

那么此RGB( 130 210 85 ) == RGB(8_573_525)

0000 0000

1000 0010

1101 0010

0101 0101 这个大数转换为int等于8,573,525

所以我们可以采用这种方法把RGB三原色3个数值只用1个int存储

这样我们要使用这三原色的时候,我们就可以把int拆开来分别看RGB三原色。

那么怎么分开呢?



Java位移运算符


Java位移运算符

是专门用来进行位(bit)运算的,也就是对二进制的每一个0/1进行运算,主要是左移和右移运算,顾名思义,就是将二进制数整体右移和左移

  • 向右移动二进制位编码: >>

    • 高位缺失的会

      补符号位

      ,即正数补0,负数补1,符号位不变低位被挤出去的就丢掉 最后保留的想要的结果
  • 无符号右移: >>>

    • 高位缺失的会

      补0

      *,低位被挤出去的就丢掉 最后保留的想要的结果
  • 向左移动二进制位编码: <<

    • 高位挤出去的丢掉,低位缺失的补0
  • 无符号左移: <<<



与运算

  • 与运算:&

    • 两组二进制码按位比较:

    • 规则: 相同保留源码 不同为0

    • 0010 1001 1111 1010 &

    • 1111 1111 0000 0000 =

    • 0010 1001 0000 0000

现在我们的知识储备已经能够进行int值取出R G B三原色了

上面合并的时候我们讲过,int4字节中R G B分别位于1-8位,9-16位,17-24位,所以我们可以通过移位操作分别取出R G B,只要将它们的值

分别移到最低8位,在与255(11111111)(0xff)相与

(&)=>为了将低8位之外的24个位都置0免得妨碍计算,就可以分别取出

例:

int rgb = 8573525;

int blue = rgb>>0&0xff;

int green = rgb>>8&0xff;

int red = rgb>>16&0xff;



十六进制

  • 十六进制: 0xFF0000

  • 表达十六进制的符号有十六个 0

    9+A

    F A:10 B:11 C:12 D:13 E:14 F:15

    • 每4个bit 用一个符号表达(这也是二进制转十六进制,4个bit分别代表8 4 2 1)
    • 例:1101 = 8 * 1+4 * 1+2 * 0+1 * 1=13
  • 表达十进制的符号 有十个 阿拉伯数字 0~9

  • 表达二进制的符号 有两个 0/1

  • 例:0A0E = 0000 1010 0000 1110



版权声明:本文为qq_52676445原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。