FuncFromYz.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:3k
- #include "stdafx.h"
- #include "PcxModule.h"
- #include "FuncFromYz.h"
- // 判断标准图像的位格式
- // from yz
- DESFORMAT _get_desformat(LPINFOSTR pInfo)
- {
- ASSERT(pInfo);
- // ASSERT(pInfo->state >= PKST_PASSVER);
- ASSERT(pInfo->sDIBInfo.bmi.biPlanes == 1);
- DESFORMAT result;
- switch(pInfo->sDIBInfo.bmi.biBitCount)
- {
- case 32:
- /******************************************************
- 32位掩码示意图
- 高 -> 低
- 0000 0000 0000 0000 0000 0000 0000 0000 888格式
- 1111 1111 ------------------------R
- 1111 1111 -------------G
- 1111 1111--B
- * Win95 系统只支持这一种格式
- ******************************************************/
- if (pInfo->sDIBInfo.bmi.biCompression == BI_RGB)
- {
- result = DF_32;
- break;
- }
- if ((pInfo->sDIBInfo.rmask == 0xff0000)&&
- (pInfo->sDIBInfo.gmask == 0xff00)&&
- (pInfo->sDIBInfo.bmask == 0xff))
- result = DF_32;
- else
- {
- ASSERT(FALSE); // 只支持888格式
- result = DF_NULL;
- }
- break;
- case 24:
- result = DF_24;
- break;
- case 16:
- /*******************************************
- 16位掩码示意图
- 高字节 低字节
- 0000 0000 0000 0000
- 1 1111--B // 555格式
- 11 111 -------G
- 111 11 --------------R
- 0
- 1 1111--B // 565格式
- 111 111 -------G
- 1111 1 --------------R
- * Win95 系统只支持以上两种格式
- *******************************************/
- if (pInfo->sDIBInfo.bmi.biCompression == BI_RGB)
- {
- result = DF_16_555;
- break;
- }
- if ((pInfo->sDIBInfo.rmask == 0x7c00)&&
- (pInfo->sDIBInfo.gmask == 0x3e0)&&
- (pInfo->sDIBInfo.bmask == 0x1f))
- result = DF_16_555;
- else if ((pInfo->sDIBInfo.rmask == 0xf800)&&
- (pInfo->sDIBInfo.gmask == 0x7e0)&&
- (pInfo->sDIBInfo.bmask == 0x1f))
- result = DF_16_565;
- else
- result = DF_NULL;
- break;
- default:
- ASSERT(FALSE); // 不接受其它格式
- result = DF_NULL;
- break;
- }
- return result;
- }
- // 判断标准图像的位格式
- // from yz
- //SOUFORMAT _get_souformat(LPBITMAPINFO pInfo)
- // 将指定的RGB颜色分量转换成555格式(WORD型值返回)
- // from yz
- WORD _cnv_rgb_to_555(BYTE red, BYTE green, BYTE blue)
- {
- WORD result = 0;
- result = (((WORD)red>>3)<<10)|(((WORD)green>>3)<<5)|((WORD)blue>>3);
- return result;
- }
- // 将指定的555格式的颜色转换成RGB颜色分量
- // from yz
- void _cnv_555_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue)
- {
- // 在555转换到RGB时,将像素的亮度调到最大
- *red = (BYTE)((col>>7)&0xf8);
- *green = (BYTE)((col>>2)&0xf8);
- *blue = (BYTE)(col<<3);
- }
- // 将指定的RGB颜色分量转换成565格式(WORD型值返回)
- // from yz
- WORD _cnv_rgb_to_565(BYTE red, BYTE green, BYTE blue)
- {
- WORD result = 0;
- result = (((WORD)red>>3)<<11)|(((WORD)green>>2)<<5)|((WORD)blue>>3);
- return result;
- }
- // 将指定的565格式的颜色转换成RGB颜色分量
- // from yz
- void _cnv_565_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue)
- {
- // 在565转换到RGB时,将像素的亮度调到最大
- *red = (BYTE)((col>>8)&0xf8);
- *green = (BYTE)((col>>3)&0xfc);
- *blue = (BYTE)(col<<3);
- }
- // 将指定的RGB颜色分量转换成888格式(DWORD型值返回)
- // from yz
- DWORD _cnv_rgb_to_888(BYTE red, BYTE green, BYTE blue)
- {
- DWORD result = 0;
- result = ((DWORD)red<<16)|((DWORD)green<<8)|(DWORD)blue;
- return result;
- }