• 数字图像处理 --- 图像的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​

  • 相关阅读:
    SpringCloud—初识微服务
    AndroidStudio无法查看Compose重组次数?
    【SpringCloud微服务】- Eureka服务注册与服务发现Discovery
    2023燕山大学计算机考研信息汇总
    [附源码]java毕业设计高校网上教材征订系统
    JSP out.println()方法具有什么功能呢?
    剑指offer——第8期
    铁打的DeltaS=0.02,流水的HFSS版本
    8年测试老鸟,性能测试-数据库连接池问题定位/分析,一篇打通...
    堆——堆排序、模拟堆
  • 原文地址:https://blog.csdn.net/daduzimama/article/details/126711342