FuncFromYz.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:3k
源码类别:

图形图象

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "PcxModule.h"
  3. #include "FuncFromYz.h"
  4. // 判断标准图像的位格式
  5. // from yz
  6. DESFORMAT _get_desformat(LPINFOSTR pInfo)
  7. {
  8. ASSERT(pInfo);
  9. // ASSERT(pInfo->state >= PKST_PASSVER);
  10. ASSERT(pInfo->sDIBInfo.bmi.biPlanes == 1);
  11. DESFORMAT result;
  12. switch(pInfo->sDIBInfo.bmi.biBitCount)
  13. {
  14. case 32:
  15. /******************************************************
  16. 32位掩码示意图
  17.     高               ->                 低
  18. 0000 0000   0000 0000   0000 0000   0000 0000  888格式
  19.             1111 1111  ------------------------R
  20.                         1111 1111 -------------G
  21.                                     1111 1111--B
  22. * Win95 系统只支持这一种格式
  23. ******************************************************/
  24. if (pInfo->sDIBInfo.bmi.biCompression == BI_RGB)
  25. {
  26. result = DF_32;
  27. break;
  28. }
  29. if ((pInfo->sDIBInfo.rmask == 0xff0000)&&
  30. (pInfo->sDIBInfo.gmask == 0xff00)&&
  31. (pInfo->sDIBInfo.bmask == 0xff))
  32. result = DF_32;
  33. else
  34. {
  35. ASSERT(FALSE); // 只支持888格式
  36. result = DF_NULL;
  37. }
  38. break;
  39. case 24:
  40. result = DF_24;
  41. break;
  42. case 16:
  43. /*******************************************
  44. 16位掩码示意图
  45.   高字节      低字节
  46. 0000 0000   0000 0000 
  47.    1 1111--B // 555格式
  48.    11 111 -------G
  49.  111 11  --------------R
  50. 0
  51.    1 1111--B // 565格式
  52.   111   111 -------G
  53. 1111 1   --------------R
  54. * Win95 系统只支持以上两种格式
  55. *******************************************/
  56. if (pInfo->sDIBInfo.bmi.biCompression == BI_RGB)
  57. {
  58. result = DF_16_555;
  59. break;
  60. }
  61. if ((pInfo->sDIBInfo.rmask == 0x7c00)&&
  62. (pInfo->sDIBInfo.gmask == 0x3e0)&&
  63. (pInfo->sDIBInfo.bmask == 0x1f))
  64. result = DF_16_555;
  65. else if ((pInfo->sDIBInfo.rmask == 0xf800)&&
  66. (pInfo->sDIBInfo.gmask == 0x7e0)&&
  67. (pInfo->sDIBInfo.bmask == 0x1f))
  68. result = DF_16_565;
  69. else
  70. result = DF_NULL;
  71. break;
  72. default:
  73. ASSERT(FALSE); // 不接受其它格式
  74. result = DF_NULL;
  75. break;
  76. }
  77. return result;
  78. }
  79. // 判断标准图像的位格式
  80. // from yz
  81. //SOUFORMAT _get_souformat(LPBITMAPINFO pInfo)
  82. // 将指定的RGB颜色分量转换成555格式(WORD型值返回)
  83. // from yz
  84. WORD _cnv_rgb_to_555(BYTE red, BYTE green, BYTE blue)
  85. {
  86. WORD result = 0;
  87. result = (((WORD)red>>3)<<10)|(((WORD)green>>3)<<5)|((WORD)blue>>3);
  88. return result;
  89. }
  90. // 将指定的555格式的颜色转换成RGB颜色分量
  91. // from yz
  92. void _cnv_555_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue)
  93. {
  94. // 在555转换到RGB时,将像素的亮度调到最大
  95. *red = (BYTE)((col>>7)&0xf8);
  96. *green = (BYTE)((col>>2)&0xf8);
  97. *blue = (BYTE)(col<<3);
  98. }
  99. // 将指定的RGB颜色分量转换成565格式(WORD型值返回)
  100. // from yz
  101. WORD _cnv_rgb_to_565(BYTE red, BYTE green, BYTE blue)
  102. {
  103. WORD result = 0;
  104. result = (((WORD)red>>3)<<11)|(((WORD)green>>2)<<5)|((WORD)blue>>3);
  105. return result;
  106. }
  107. // 将指定的565格式的颜色转换成RGB颜色分量
  108. // from yz
  109. void _cnv_565_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue)
  110. {
  111. // 在565转换到RGB时,将像素的亮度调到最大
  112. *red = (BYTE)((col>>8)&0xf8);
  113. *green = (BYTE)((col>>3)&0xfc);
  114. *blue = (BYTE)(col<<3);
  115. }
  116. // 将指定的RGB颜色分量转换成888格式(DWORD型值返回)
  117. // from yz
  118. DWORD _cnv_rgb_to_888(BYTE red, BYTE green, BYTE blue)
  119. {
  120. DWORD result = 0;
  121. result = ((DWORD)red<<16)|((DWORD)green<<8)|(DWORD)blue;
  122. return result;
  123. }