数字图像处理 --- 图像的HighBit与LowBit

 图像的HighBit与LowBit

        High-bit与Low-bit的概念和little-endian和big-endian的概念是相辅相成的(虽然,他们是相互独立的)。 他们都是针对计算机中的一个字(WORD)来说的。

        前者说的是在一个16bit的字中,保存一个二进制数。如果不能填满整个16位,那么多出来的0,究竟是放在16bit字中的前面,还是放在后面?比如说一个16bit的字,保存了一个8位的二进制数,究竟是把这8位数放在高bit位,空出来的低bit位补0(也就是High-bit)?还是把这8位数放在低bit位,空出来的高bit位补0(Low-bit)。

        而后者说的是在一个字中,高8位和低8位的两个Byte的位置要不要交换。

举个例子

Low-bit与High-Bit的例子:

        4095用二进制表示是111。。。1111共计12位。

 如果把这12个1放在WORD的低位,高位补零,就是Low-Bit的保存方式(实际上Low-Bit也就是按照自然的方式存储数据):

用Low-Bit的方式来保存,读出来以后还是4095,这也是为什么说Low-bit是一种自然的保存方式的原因。 

  如果把这12个1放在WORD的高位,低位补零,就是High-Bit的保存方式:

 用High-bit的方式保存4095,读出来以后就是65520。(上图的笔记中有误)这不是我们保存的真实值,因为,如果一个数据在保存的时候是用High-bit的方式来保存的,那么我们在读这个数据的时候,就不能直接读,而是要把低位所补的0通通移掉。

         这里要注意一点,这里所说的移位,是按照数据的原始格式来移的,而不是按照数据本身。也就是说,如果你电脑里有个变量(数)是unsign char型的,也就是8位,那么无论这个变量里面保存的数是1(0000 0001)还是255(1111 1111),只要是按照High-bit的方式来保存,保存的时候都是低八位补0,这样一来8bit的1就在一个字(16bit)中就变成了(0000 0001 0000 0000),而8bit中的255就变成了(1111 1111 0000 0000)。这样一来,在读8bit的数时,就要先右移掉低位的8个0。

        依此类推,如果一个字中保存的是10bit的数,读的时候就右移6位。如果是12bit的数,读的时候,就右移4位,等等。如果是在一个字中保存16bit的数,则无需移位。


如何读取用High-bit方式保存的数据 

下面的笔记中,我详细记录了读High-bit数据的算法和原理:


个人笔记(补充):

(全文完)

作者 --- 松下J27

经典歌词赏析:

《牵手》---节选

因为爱着你的爱

因为梦着你的梦

所以悲伤着你的悲伤

幸福着你的幸福

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27​

猜你喜欢

转载自blog.csdn.net/daduzimama/article/details/126711342