Hi, all
本人已认真看完了BMP格式文件结构,在网本论坛下了DIBDisplay实例,现想将bmp格式文件中文件头二进制数据转换为16进制数据,图像灰度二进制数据转换为10进制数据,并按图像属性按行列存为xls文件,以对BMP文件有有更深入的了解,同时方便初学者学习,哪位高手能指点一下数据存储方面的知识?
本人已认真看完了BMP格式文件结构,在网本论坛下了DIBDisplay实例,现想将bmp格式文件中文件头二进制数据转换为16进制数据,图像灰度二进制数据转换为10进制数据,并按图像属性按行列存为xls文件,以对BMP文件有有更深入的了解,同时方便初学者学习,哪位高手能指点一下数据存储方面的知识?
1、位图头结构(BITMAPINFOHEADER)
2、颜色索引(调色板)
3、位图数据(数据结构规范,行对齐,行倒置)
网上bmp的文章很多,搜索
HDIB CDibImage::ReadDIBFile(CFile& file)
{
BITMAPFILEHEADER bmfHeader;
HDIB hDIB;
LPSTR pDIB;
DWORD dwBitsSize;
hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);
if (hDIB == 0)
{
return NULL;
}
pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
if (file.ReadHuge(pDIB, dwBitsSize ) !=
dwBitsSize ) // 读象素
{
::GlobalUnlock((HGLOBAL) hDIB);
::GlobalFree((HGLOBAL) hDIB);
return NULL;
}
::GlobalUnlock((HGLOBAL) hDIB); CString str1,str2="";
char* buffpoint;
char buf[2]={0};
for(int i=0;i<1078;i++)
{
str1="";
buffpoint=str2.GetBuffer(2);
itoa(*(pDIB+i),buffpoint,16);
str2.ReleaseBuffer();
str1=str2; *pstr+=str1+",";
}
int k=0; for(;i<1921078;)
{
//*(pdata+i) = *(pDIB+i);
pstr[i].Format("%x",*(pDIB+i));
i+=32000;
k+=20;
} CFile m_file;
CTime ctimh,ctim;
ctim=CTime::GetCurrentTime();
ctimh=CTime::GetCurrentTime();
CString filename="G:\\xl\\bmp\\";
filename+=ctim.Format("%y-%m-%d");
filename+=ctimh.Format("%h-%m-%s");
filename+=".txt"; m_file.Open(filename,CFile::modeCreate
|CFile::modeNoTruncate
|CFile::modeWrite
|CFile::shareDenyNone);
m_file.WriteHuge(pstr,1921078); m_file.Close();
//delete []pdata;
delete []pstr; return hDIB;
}我读到的是指针中的数据,怎么存下来