// 读取图像数据,WIDTHBYTES宏用于生成每行字节数
int nWidthBytes = WIDTHBYTES((pBMIH->biWidth)*pBMIH->biBitCount);
// 申请biHeight个长度为biWidthBytes的数组,用他们来保存位图数据
lpData = new LPBYTE[(pBMIH->biHeight)];
for(int i=0; i<(pBMIH->biHeight); i++)
{
lpData[i] = new BYTE[nWidthBytes];
file.Read(lpData[i], nWidthBytes);
}
没读完一行后,怎么读下一行,难道执行完read后会指向下一行吗?
int nWidthBytes = WIDTHBYTES((pBMIH->biWidth)*pBMIH->biBitCount);
// 申请biHeight个长度为biWidthBytes的数组,用他们来保存位图数据
lpData = new LPBYTE[(pBMIH->biHeight)];
for(int i=0; i<(pBMIH->biHeight); i++)
{
lpData[i] = new BYTE[nWidthBytes];
file.Read(lpData[i], nWidthBytes);
}
没读完一行后,怎么读下一行,难道执行完read后会指向下一行吗?
解决方案 »
- 十几行代码产生的超难,超诡异问题,C++高手请进 100分送,解决再送100分
- 请教:英文系统下,edit控件作为密码框 不能显示星号,感觉输入的是乱码...
- ++++++++立即结帖:关于内存泄露的4个基础问题++++++++
- 大哥们,我是菜鸟!问个问题
- msdn2003版怎么装呀!我只能装第一张盘,以后的怎么装呀!
- 如何获得FTP服务器上文件或目录的建立时间
- 关于使用ODBC检索MS SQL Server中的IMAGE字段的问题!
- vc6.0!
- 请教大侠简单的网络问题。不知可不可以用CSocket把自己的机器看作服务器,我对网络编程不是很了解.
- win2000出错
- 重载了文件打开函数,第一次可以打开,第二次弹出错了,不知道是哪里内存溢出了
- 问个关于BASS库的问题
{
// 文件数据
LPBYTE *lpData;
// 位图信息头
BITMAPINFOHEADER *pBMIH;
// 颜色表指针
LPVOID lpvColorTable = NULL;
// 颜色表颜色数目
int nColorTableEntries;
BITMAPFILEHEADER bmfHeader;
// 读取文件头
if(!file.Read(&bmfHeader, sizeof(bmfHeader)))
return FALSE;
// 检查开头两字节是否为BM
if(bmfHeader.bfType != MAKEWORD('B', 'M'))
{
return FALSE;
}
// 读取信息头
pBMIH= (BITMAPINFOHEADER*)newBYTE[bmfHeader.bfOffBits - sizeof(bmfHeader)];
if(!file.Read(pBMIH, bmfHeader.bfOffBits - sizeof(bmfHeader)))
{
delete pBMIH;
return FALSE;
}
// 定位到颜色表
nColorTableEntries =
(bmfHeader.bfOffBits-sizeof(bmfHeader)-sizeof(BITMAPINFOHEADER))/sizeof(RGBQUAD);
if(nColorTableEntries > 0)
{
lpvColorTable = pBMIH + 1;
}
pBMIH->biHeight = abs(pBMIH->biHeight);
// 读取图像数据,WIDTHBYTES宏用于生成每行字节数
int nWidthBytes = WIDTHBYTES((pBMIH->biWidth)*pBMIH->biBitCount);
// 申请biHeight个长度为biWidthBytes的数组,用他们来保存位图数据
lpData = new LPBYTE[(pBMIH->biHeight)];
for(int i=0; i<(pBMIH->biHeight); i++)
{
lpData[i] = new BYTE[nWidthBytes];
file.Read(lpData[i], nWidthBytes);
}
// 更新数据
CleanUp();
m_lpData = lpData;
m_pBMIH = pBMIH;
m_lpvColorTable = lpvColorTable;
m_nColorTableEntries = nColorTableEntries;
return TRUE;
}
整个程序,还有lpvColorTable = pBMIH + 1;什么意思?
lpvColorTable = pBMIH+1是定位调色板信息地址的。当存在调色板时(256色以内需要调色板),调色板的指针指向位图文件描述体之后。pBMIH+1,这里的1代表着一个BITMAPINFOHEADER结构体大小