ConvertColor.c
上传用户:zfj3589
上传日期:2022-07-13
资源大小:635k
文件大小:8k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /****************************************************************************************
  2. * 文件名:CONVERTCOLOR.C
  3. * 功能:颜色值转换程序。
  4. * 作者:黄绍斌
  5. * 日期:2004.02.26
  6. * 备注:
  7. ****************************************************************************************/
  8. #include  "config.h"
  9. #if  CONVERTCOLOR_EN==1
  10. /****************************************************************************
  11. * 名称:GUI_Color2Index_565()
  12. * 功能:将RGB值转换16位索引值。转换后的值适用于64K色彩色液晶。
  13. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  14. * 出口参数:返回转换值(64K色,d15--d11为R值,d10--d5为G值,d4--d0为B值)
  15. * 说明:
  16. ****************************************************************************/
  17. uint16  GUI_Color2Index_565(uint32 colorRGB) 
  18. {  uint8  r, g, b;
  19.    b = ( colorRGB>>(0+3) ) & 0x1f; // 取B色的高5位
  20.    g = ( colorRGB>>(8+2) ) & 0x3f; // 取G色的高6位
  21.    r = ( colorRGB>>(16+3)) & 0x1f; // 取R色的高5位
  22.    
  23.    return( (r<<11) + (g<<5) + (b<<0) );
  24. }
  25. /****************************************************************************
  26. * 名称:GUI_Index2Color_565()
  27. * 功能:将16位索引值转换为RGB值。适用于64K色彩色液晶。
  28. * 入口参数:index 16位索引值(64K色,d15--d11为R值,d10--d5为G值,d4--d0为B值)
  29. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  30. * 说明:
  31. ****************************************************************************/
  32. uint32  GUI_Index2Color_565(uint16 index) 
  33. {  uint32  r, g, b;
  34.    b = (index>>0)  & 0x1f;
  35.    g = (index>>5)  & 0x3f;
  36.    r = (index>>11) & 0x1f;
  37.    r = r * 255 / 31;
  38.    g = g * 255 / 63;
  39.    b = b * 255 / 31;
  40.    
  41.    return( (r<<16) + (g<<8) + (b<<0) );
  42. }
  43. /****************************************************************************
  44. * 名称:GUI_Color2Index_555()
  45. * 功能:将RGB值转换15位索引值。转换后的值适用于32K色彩色液晶。
  46. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  47. * 出口参数:返回转换值(32K色,d14--d10为R值,d9--d5为G值,d4--d0为B值)
  48. * 说明:
  49. ****************************************************************************/
  50. uint16  GUI_Color2Index_555(uint32 colorRGB) 
  51. {  uint8  r, g, b;
  52.    b = ( colorRGB>>(0+3) ) & 0x1f;
  53.    g = ( colorRGB>>(8+3) ) & 0x1f;
  54.    r = ( colorRGB>>(16+3)) & 0x1f;
  55.   
  56.    return( (r<<10) + (g<<5) + (b<<0) );
  57. }
  58. /****************************************************************************
  59. * 名称:GUI_Index2Color_555()
  60. * 功能:将15位索引值转换为RGB值。适用于32K色彩色液晶。
  61. * 入口参数:index 15位索引值(32K色,d14--d10为R值,d9--d5为G值,d4--d0为B值)
  62. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  63. * 说明:
  64. ****************************************************************************/
  65. uint32  GUI_Index2Color_555(uint16 index) 
  66. {  uint32  r, g, b;
  67.    b = (index>>0)  & 0x1f;
  68.    g = (index>>5)  & 0x1f;
  69.    r = (index>>10) & 0x1f;
  70.    r = r * 255 / 31;
  71.    g = g * 255 / 31;
  72.    b = b * 255 / 31;
  73.    
  74.    return( (r<<16) + (g<<8) + (b<<0) );
  75. }
  76. /****************************************************************************
  77. * 名称:GUI_Color2Index_444()
  78. * 功能:将RGB值转换12位索引值。转换后的值适用于4096色伪彩液晶。
  79. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  80. * 出口参数:返回转换值(4096色,RRRRGGGGBBBB)
  81. * 说明:
  82. ****************************************************************************/
  83. uint16  GUI_Color2Index_444(uint32 colorRGB) 
  84. {  uint8 r,g,b;
  85.    b = ( colorRGB>>(0+4) ) & 0x0f;
  86.    g = ( colorRGB>>(8+4) ) & 0x0f;
  87.    r = ( colorRGB>>(16+4)) & 0x0f;
  88.    
  89.    return ( (r<<8) + (g << 4) + (b<<0) );
  90. }
  91. /****************************************************************************
  92. * 名称:GUI_Index2Color_444()
  93. * 功能:将12位索引值转换为RGB值。适用于4096色伪彩液晶。
  94. * 入口参数:index 12位索引值(4096色,RRRRGGGGBBBB)
  95. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  96. * 说明:
  97. ****************************************************************************/
  98. uint32  GUI_Index2Color_444(uint16 index) 
  99. {  uint8  r,g,b;
  100.    b = (index >> 0) & 0x0f;
  101.    g = (index >> 4) & 0x0f;
  102.    r = (index >> 8) & 0x0f;
  103.   
  104.    r = r * 17;
  105.    g = g * 17;
  106.    b = b * 17;
  107.    
  108.    return ( (r<<16) + (g<<8) + (b<<0) );
  109. }
  110. /****************************************************************************
  111. * 名称:GUI_Color2Index_332()
  112. * 功能:将RGB值转换8位索引值。转换后的值适用于256色伪彩液晶。
  113. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  114. * 出口参数:返回转换值(256色,RRRGGGBB)
  115. * 说明:
  116. ****************************************************************************/
  117. uint8  GUI_Color2Index_332(uint32 colorRGB) 
  118. {  uint32  r, g, b;
  119.    b = (colorRGB>>0)  & 0xff;
  120.    g = (colorRGB>>8)  & 0xff;
  121.    r = (colorRGB>>16) & 0xff;
  122.    r = (r * 7 + 127) / 255;
  123.    g = (g * 7 + 127) / 255;
  124.    b = (b + 42) / 85;
  125.    
  126.    return( (r<<5) + (g << 2) + (b<<0) );
  127. }
  128. /****************************************************************************
  129. * 名称:GUI_Index2Color_332()
  130. * 功能:将8位索引值转换为RGB值。适用于256色伪彩液晶。
  131. * 入口参数:index 8位索引值(256色,RRRGGGBB)
  132. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  133. * 说明:
  134. ****************************************************************************/
  135. uint32  GUI_Index2Color_233(uint8 index)
  136. {  uint32  r, g, b;
  137.    r = (index >> 5) * 255 / 7;
  138.    g = ((index >> 3) & 7) * 255 / 7;
  139.    b = (index & 3) * 85;
  140.    
  141.    return( (r<<16) + (g << 8) + (b<<0) );
  142. }
  143. /****************************************************************************
  144. * 名称:GUI_Color2Index_222()
  145. * 功能:将RGB值转换8位索引值。转换后的值适用于64色液晶。
  146. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  147. * 出口参数:返回转换值(64色,RRGGBB)
  148. * 说明:
  149. ****************************************************************************/
  150. uint8  GUI_Color2Index_222(uint32 colorRGB)
  151. {  uint32  r, g, b;
  152.    b = (((colorRGB>>0) &255)+0x2a)/0x55;
  153.    g = (((colorRGB>>8) &255)+0x2a)/0x55;
  154.    r = (((colorRGB>>16)&255)+0x2a)/0x55;
  155.    
  156.    return( (r<<4) + (g<<2) + (b<<0) );
  157. }
  158. /****************************************************************************
  159. * 名称:GUI_Index2Color_222()
  160. * 功能:将6位索引值转换为RGB值。适用于64色液晶。
  161. * 入口参数:index 6位索引值(64色,RRGGBB)
  162. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  163. * 说明:
  164. ****************************************************************************/
  165. uint32  GUI_Index2Color_222(uint8 index) 
  166. {  uint8  r, g, b;
  167.    b = ((index>>0)&3) * 0x55;
  168.    g = ((index>>2)&3) * 0x55;
  169.    r = ((index>>4)&3) * 0x55;
  170.    
  171.    return( (r<<16) + (g<<8) + (b<<0) );
  172. }
  173. /****************************************************************************
  174. * 名称:GUI_Color2Index_111()
  175. * 功能:将RGB值转换3位索引值。转换后的值适用于8色液晶或8级恢度液晶。
  176. * 入口参数:ColorRGB RGB值,d23--d16为R值,d15--d8为G值,d7--d0为B值
  177. * 出口参数:返回转换值(8色,RGB)
  178. * 说明:
  179. ****************************************************************************/
  180. uint8  GUI_Color2Index_111(uint32 colorRGB) 
  181. {  uint8  r, g, b;
  182.    b = (colorRGB>>(0+7))  &1;
  183.    g = (colorRGB>>(8+7))  &1;
  184.    r = (colorRGB>>(16+7)) &1;
  185.    
  186.    return( (r<<2) + (g<<1) + (b<<0) );
  187. }
  188. /****************************************************************************
  189. * 名称: GUI_Index2Color_111()
  190. * 功能:将3位索引值转换为RGB值。适用于8色液晶或8级恢度液晶。
  191. * 入口参数:index 3位索引值(8色,RGB)
  192. * 出口参数:返回值即为RGB值(d23--d16为R值,d15--d8为G值,d7--d0为B值)。
  193. * 说明:
  194. ****************************************************************************/
  195. uint32  GUI_Index2Color_111(uint8 Index) 
  196. {  uint8  r, g, b;
  197.    b = ((Index>>0)&1) * 0xff;
  198.    g = ((Index>>1)&1) * 0xff;
  199.    r = ((Index>>2)&1) * 0xff;
  200.    
  201.    return( (r<<16) + (g<<8) + (b<<0) );
  202. }
  203. #endif