大哥大姐们帮个忙解决思路
大哥大姐们帮个忙
调试结果:
dibFile {hFile=0x000000f0 name=???} CFile
pDib 0x00340044 " " unsigned char *
size 974956 unsigned long
不知道怎么回事啊
------解决方案--------------------
pDib值是否正确
------解决方案--------------------
dibFile有问题啊,是不是文件没取对指针?
------解决方案--------------------
GlobalAlloc
我记得这个操作之后有个GlobalLock
------解决方案--------------------
if(bitmapFileHeader.bfType==0x4d42)
{
DWORD fileLenth=dibFile.GetLength();
DWORD size=fileLenth-sizeof(BITMAPFILEHEADER);
/*******************************这地方有什么问题啊********************************/
BYTE *pDib=(BYTE *)GlobalAlloc(GMEM_MOVEABLE,size);
dibFile.Read((void *)pDib,size);//运行到这里就不往下走了
/*******************************************************************************/
dibFile.Close();
m_pBitmapInfo=(BITMAPINFO *)pDib;
m_pRGB=(RGBQUAD *)(pDib+m_pBitmapInfoHeader->biSize);
int m_numberOfColors=GetNumberOfColors();
if(m_pBitmapInfoHeader->biClrUsed==0)
m_pBitmapInfoHeader->biClrUsed=m_numberOfColors;
DWORD colorTableSize=m_numberOfColors * sizeof(RGBQUAD);
m_pData=pDib+m_pBitmapInfoHeader->biSize+colorTableSize;
if(m_pRGB==(RGBQUAD*)m_pData)
m_pRGB=NULL;
m_pBitmapInfoHeader->biSizeImage=GetSize();
m_valid=TRUE;
}
调试结果:
dibFile {hFile=0x000000f0 name=???} CFile
pDib 0x00340044 " " unsigned char *
size 974956 unsigned long
不知道怎么回事啊
------解决方案--------------------
pDib值是否正确
------解决方案--------------------
dibFile有问题啊,是不是文件没取对指针?
------解决方案--------------------
GlobalAlloc
我记得这个操作之后有个GlobalLock
------解决方案--------------------
BOOL ImgCenterDib::Read(LPCTSTR lpszPathName)
{
//读模式打开图像文件
CFile file;
if (!file.Open(lpszPathName, CFile::modeRead
------解决方案--------------------
CFile::shareDenyWrite))
return FALSE;
BITMAPFILEHEADER bmfh;
try {
//清理空间
Empty();
//读取BITMAPFILEHEADER结构到变量bmfh中
int nCount=file.Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
//异常判断
if(nCount != sizeof(BITMAPFILEHEADER)) {
throw new CException;
}
if(bmfh.bfType != 0x4d42) {
throw new CException;
}
//为m_lpDib分配空间,读取DIB进内存
if(m_lpDib!=NULL)
delete []m_lpDib;
m_lpDib=new BYTE[file.GetLength() -sizeof(BITMAPFILEHEADER)];
file.Read(m_lpDib, file.GetLength() -sizeof(BITMAPFILEHEADER));
//m_lpBmpInfoHead位置为m_lpDib起始位置
m_lpBmpInfoHead = (LPBITMAPINFOHEADER)m_lpDib;
//为成员变量赋值
m_imgWidth=m_lpBmpInfoHead->biWidth;
m_imgHeight=m_lpBmpInfoHead->biHeight;
m_nBitCount=m_lpBmpInfoHead->biBitCount;
//计算颜色表长度
m_nColorTableLength=
ComputeColorTabalLength(m_lpBmpInfoHead->biBitCount);
//生成逻辑调色板
m_hPalette = NULL;
if(m_nColorTableLength!=0){
m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));
MakePalette();
}
//m_pImgData指向DIB的位图数据起始位置
m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER) +
sizeof(RGBQUAD) * m_nColorTableLength;
}
catch(CException* pe) {
AfxMessageBox("Read error");