zoukankan      html  css  js  c++  java
  • directX的16位和24位的色彩模式

    #deine _RGB16BIT555(r,g,b) ((b&31) + ((g&31) << 5) + ((r&31) << 10))

    因为这个是16位色5551格式的

    X R4 R3 R2 R1 R0 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

    因此31转化成二进制与的话、就是5个1(11111)、假设传来的RGB值都为11111、那么

    B就为11111

    G就为1111100000

    R就为111110000000000

    所以三者相加就为111111111111111、刚好就一一对应上面的表格、因为PC机采用低字节在前的格式、数据通常是从低位到高位、而这个色彩位组却是相反的、采用了高字节在前的格式、因为读起来符合RGB的顺序、所以填充的时候要相反来填充、所以就是以BGR的顺序来填充、剩下的最后一个高位X是用来填充成16位数据的、无任何意义、所以实际的RGB数据就为

    0111111111111111

    类似的、16位色除了有X555的排列、还有565的排列、也就是说G为6位、刚好就够了不用X来填充16位数据、因此数据为

    R4 R3 R2 R1 R0 G5 G4 G3 G2 G1 G0 B4 B3 B2 B1 B0

    所以产生565的16位色宏为

    #define _RGB16BIT565(r,g,b) ((b&31) + ((g&63) << 5) + ((r&31) << 11))

    这里类似的先将31和63转换成二进制、31刚好是5位数11111、63刚好是6位数111111、所以也就符合了565的排列了、一如往前、也设定传来的色彩白色、那么

    b就是11111

    g就是11111100000

    r就是1111100000000000

    那么加起来狠自然也是16位的白色了1111111111111111

    除了X555和565排列外、还有一种A555的16位、无非就是把X这个无用位替换成ALPHA通道、使其来控制透明色

    ===============================================

    剩下的24位和32位的宏就不再推导了、给出了相应的宏

    #define _RGB24BIT(r,g,b) (b + (g << 8) + (r << 16))

    24位采用888的位排列

    还有32位的、32位采用了8888的排列、也就是ARGB或者XRGB、其实ARGB也就是带有透明通道的色彩模式、而XRGB则是完全模拟24位的色彩模式、为啥呢、因为32不能被3整除、所以RGB不能均匀的排布在32位的数据上、所以现实的情况是许多视频显卡都不能3位3位地定位、所以便转换成8888的模式、其中前8位就是用来填充数据的、照理说迩可以随便填充任意1或0、不过建议填充为8个0比较保险、所以一个模拟24位的32位色彩的白色便 是

    00000000111111111111111111111111

  • 相关阅读:
    c++回调java方法
    c++ 11学习笔记--智能指针
    c++ 11学习笔记--Lambda 表达式(对比测试Lambda ,bind,Function Object)
    explicit构造函数和private
    c++ 11学习笔记--右值引用和移动构造语义
    c++ 11学习笔记-- 常量表达式(constexpr)
    从京东app学到的(1)
    从文轩商城app学到的
    AntV G2 toolTip 自定义显示
    Ant Design of Vue table表格 点击一行选中效果
  • 原文地址:https://www.cnblogs.com/klobohyz/p/2509466.html
Copyright © 2011-2022 走看看