CDib类(详解)Word文件下载.doc

上传人:b****9 文档编号:13086312 上传时间:2022-10-04 格式:DOC 页数:7 大小:58.50KB
下载 相关 举报
CDib类(详解)Word文件下载.doc_第1页
第1页 / 共7页
CDib类(详解)Word文件下载.doc_第2页
第2页 / 共7页
CDib类(详解)Word文件下载.doc_第3页
第3页 / 共7页
CDib类(详解)Word文件下载.doc_第4页
第4页 / 共7页
CDib类(详解)Word文件下载.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

CDib类(详解)Word文件下载.doc

《CDib类(详解)Word文件下载.doc》由会员分享,可在线阅读,更多相关《CDib类(详解)Word文件下载.doc(7页珍藏版)》请在冰豆网上搜索。

CDib类(详解)Word文件下载.doc

DWORDdwWidthBytes;

BYTE*pDib;

//文件中位图总数据指针

DWORDsize;

//位图总数据的长度

CDib();

~CDib();

charm_fileName[256];

//记录文件名称

char*GetFileName();

//获取BMP位图文件名

BOOLIsValid();

//判断是否载入了位图文件,

DWORDGetSize();

//获取位图文件的大小

UINTGetWidth();

//获取位图宽度像素数

UINTGetHeight();

//获取位图高度像素数

UINTGetNumberOfColors();

//获取位图颜色数目

RGBQUAD*GetRGB();

//获取颜色表指针

BYTE*GetData();

//获取位图数据指针

BYTE*GetData2();

//获取位图数据指针

//voidLoadFile(constTCHAR*dibFileName);

//载入BMP位图文件

//BOOLSaveFile(constTCHAR*pszFileName);

//保存BMP位图文件

DWORDGetDibWidthBytes();

//获取位图的宽度字节数

BITMAPINFO*GetInfo();

//获取位图信息结构的指针

WORDPaletteSize(LPBYTElpDIB);

//获取位图指针指向的位图的调色板的字节大小

WORDDIBNumColors(LPBYTElpDIB);

//获取位图指针指向的位图的颜色数目

voidSaveFile(constCStringfilename);

voidGradetoRGB();

voidRGBtoGrade();

voidLoadFile(constCStringdibFileName);

};

#endif

//然后就是方法的实现部分:

DIB.CPP

#include"

stdafx.h"

Dib.h"

windowsx.h"

#defineWIDTHBYTES(bits)(((bits)+31)/32*4)

CDib:

:

CDib()

}

~CDib()

GlobalFreePtr(m_pBitmapInfo);

//释放在LoadFile中分配给m_pDib的内存资源

voidCDib:

LoadFile(constCStringdibFileName)

strcpy(m_fileName,dibFileName);

//复制文件名字符串

CFiledibFile(m_fileName,CFile:

modeRead);

//只读打开文件

dibFile.Read((void*)&

bitmapFileHeader,sizeof(BITMAPFILEHEADER));

//读取文件信息头数据

//判断文件是否为位图文件

if(bitmapFileHeader.bfType==0x4d42)

{

DWORDfileLength=dibFile.GetLength();

//获取文件数据总长度

DWORDsize=fileLength-sizeof(BITMAPFILEHEADER);

//计算位图文件位图总数据长度

BYTE*pDib=(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE,size);

//分配相应的内存资源

dibFile.Read((void*)pDib,size);

//读取文件中位图总数据

dibFile.Close();

//关闭位图文件

m_pBitmapInfo=(BITMAPINFO*)pDib;

//指向位图信息,位图信息包括信息头和颜色表

m_pBitmapInfoHeader=(BITMAPINFOHEADER*)pDib;

//指向位图信息头

m_pRGB=(RGBQUAD*)(pDib+m_pBitmapInfoHeader->

biSize);

//指向位图颜色表,指针沿数据向后移动m_pDibInfoHeader->

biSize个字节

intm_numberOfColors=GetNumberOfColors();

//获取颜色数目

if(m_pBitmapInfoHeader->

biClrUsed==0)

m_pBitmapInfoHeader->

biClrUsed=m_numberOfColors;

//如果信息头没有记录使用的颜色数目,重新设置

DWORDcolorTableSize=m_numberOfColors*sizeof(RGBQUAD);

//计算颜色表大小

m_pData=pDib+m_pBitmapInfoHeader->

biSize+colorTableSize;

//指向位图数据

if(m_pRGB==(RGBQUAD*)m_pData)

m_pRGB=NULL;

biSizeImage=GetSize();

//在信息头中设置文件大小值

m_valid=TRUE;

}

else

{//打开的文件不是位图文件

m_valid=FALSE;

AfxMessageBox("

这不是一个位图文件!

"

);

BOOLCDib:

IsValid()

{//判断是否打开了文件

returnm_valid;

char*CDib:

GetFileName()

{//文件已打开就可以获取文件名

returnm_fileName;

UINTCDib:

GetWidth()

{//如果信息头不为NULL,可以获取位图宽度像素数

return(UINT)m_pBitmapInfoHeader->

biWidth;

GetHeight()

{//如果信息头不为NULL,可以获取位图高度像素数

biHeight;

DWORDCDib:

GetSize()

if(m_pBitmapInfoHeader->

biSizeImage!

=0)

{//位图文件打开了,并且信息头的位图数据大小不为0就直接返回biSizeImage

returnm_pBitmapInfoHeader->

biSizeImage;

{//文件已打开,但是信息头记录的位图大小为0,重新计算并返回位图数据大小

DWORDheight=(DWORD)GetHeight();

DWORDwidth=(DWORD)GetWidth();

returnheight*width;

GetDibWidthBytes()//返回位图的宽度字节数

//获取位图像素位数和位图宽度像素数

byBitCount=m_pBitmapInfoHeader->

biBitCount;

LONGnWidth=m_pBitmapInfoHeader->

dwWidthBytes=(DWORD)m_pBitmapInfoHeader->

//如果位图的每个像素的位//数是8,那么位图的字节数等于像素数

if(byBitCount==1)dwWidthBytes=(nWidth+7)/8;

//如果位图的每个像素的位数是1,//那么一个字节包含8个像素

elseif(byBitCount==4)dwWidthBytes=(nWidth+1)/2;

//如果位图的每个像素的位数//是4,那么一个字节包含2个像素

elseif(byBitCount==24)dwWidthBytes=3*nWidth;

//如果位图的每个像素的位数是//24,那么3个字节为一个像素

while((dwWidthBytes&

3)!

=0)dwWidthBytes++;

//位图的宽度字节数总是4的倍数

returndwWidthBytes;

GetNumberOfColors()

intnumberOfColors;

if((m_pBitmapInfoHeader->

biClrUsed==0)&

&

(m_pBitmapInfoHeader->

biBitCount<

9))

{//位图信息头的颜色数目为零,并且颜色位数小于9,

//从颜色位数判断颜色数目

switch(m_pBitmapInfoHeader->

biBitCount)

{

case1:

numberOfColors=2;

break;

case4:

numberOfColors=16;

case8:

numberOfColors=256;

}

//位图信息头的颜色数目不为零,直接获取颜色数目

numberOfColors=(int)m_pBitmapInfoHeader->

biClrUsed;

returnnumberOfColors;

BYTE*CDib:

GetData()

returnm_pData;

//返回位图数据

GetData2()

{//返回位图数据

if(GetRGB())

m_pData2=m_pData;

returnm_pData2;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1