• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: bmp  位图  24  

资源简介

封装的一个将24BitCount 的bmp 转换为16bitCount 或8bitcount 或4Bitcount类。并保存。此接口只需要输入要转换图片的路径就可以获得转换后图片的bitmap。此接口在兼容各种平台

资源截图

代码片段和文件信息

// BitTransform.cpp: implementation of the CBitTransform class.
//
//////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “BitTrans.h“
#include “BitTransform.h“

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#pragma pack(1)
typedef struct _BITMAPFILEHEADER{
WORD    bfType; 
DWORD   bfSize; 
WORD    bfReserved1; 
WORD    bfReserved2; 
DWORD   bfOffBits; 
}_BITMAPFILEHEADER; 

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CBitTransform::CBitTransform()
{

}

CBitTransform::~CBitTransform()
{

}

BOOL CBitTransform::Bit24ToBit16(HBITMAP &hBitmapchar *szOldBmpNamechar *szNewBmpName)
{
int nPaletteSize =0;
bool bFileRead = false;
char *lpbuff  = NULL;
BITMAPFILEHEADER* pBmpFileHeader = NULL;
BITMAPINFOHEADER* pBmpInfoHeader = NULL;

FILE* bitmapFile;  
//CFileException fileException;  
//if(!bitmapFile.Open(szOldBmpNameCFile::modeRead&fileException)) 
bitmapFile = fopen(szOldBmpName“r+b“);
if(bitmapFile == NULL)
{  
TRACE(“Can‘t open file %s\n“szOldBmpName/*fileException.m_cause*/);
return false;


int bitmapfileheaderLen = sizeof(BITMAPFILEHEADER);
pBmpFileHeader=(BITMAPFILEHEADER*) new char [bitmapfileheaderLen];//给文件信息头分配内存  
//bitmapFile.Read(pBmpFileHeaderbitmapfileheaderLen);//读入文件信息头信息 
fread(pBmpFileHeaderbitmapfileheaderLen1bitmapFile);

int bitmapinfoheader = sizeof(BITMAPINFOHEADER);
pBmpInfoHeader=(BITMAPINFOHEADER*) new char [bitmapinfoheader];//给BMP信息头分配内存  
//bitmapFile.Read(pBmpInfoHeaderbitmapinfoheader); 
fread(pBmpInfoHeaderbitmapinfoheader1bitmapFile);

if(pBmpFileHeader->bfType!=0x4D42)//判断文件是不是位图文件  
{  
TRACE((“This is not a bitmap file!“));  
bFileRead=FALSE;  
//bitmapFile.Close();
fclose(bitmapFile);
delete []pBmpFileHeader;
delete []pBmpInfoHeader;
return false;  
}  
if(pBmpInfoHeader->biCompression!=0)//判断图像是不是压缩的  
{  
AfxMessageBox(“This system only support Un-compression!!“);  
fclose(bitmapFile);
delete []pBmpFileHeader;
delete []pBmpInfoHeader;
return false; 
}  
DWORD dwbmp;
switch(pBmpInfoHeader->biBitCount)//判断颜色的位数  
{  
case 1:  
nPaletteSize=2;  
break;  
case 4:  
nPaletteSize=16;  
break;  
case 8:  
nPaletteSize=256;  
break;
case 24:  
nPaletteSize=0;//当为真彩色时没有颜色表,所以为0 
dwbmp = (pBmpInfoHeader->biWidth*24+31)/32*4*pBmpInfoHeader->biHeight;
lpbuff = new char[dwbmp];
//bitmapFile.Seek(bitmapfileheaderLen+bitmapinfoheaderSEEK_SET);
//bitmapFile.Read(lpbuffdwbmp);
fread(lpbuffdwbmp1bitmapFile);
Bit24ToBit16Ex(hBitmap16pBmpInfoHeader->biWidthpBmpInfoHeader->biHeight(char*)lpbuffszNewBmpName);
break;  
default:  
TRACE(“This color is not valid!“);   
}

delete []pBm

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7542  2010-09-12 21:38  BitTransform\BitTransform.cpp

     文件       1128  2010-09-12 23:28  BitTransform\BitTransform.h

     目录          0  2010-09-14 22:03  BitTransform

----------- ---------  ---------- -----  ----

                 8670                    3


评论

共有 条评论