我用LoadImage和LoadBitmap加载了位图资源。 当我想获得指向位图像素数据的指针时,我用GetObject(hBitmap, sizeof(bm), &bm);
整个bm结构里数据都正确,唯独bm.bmBits = 0x00000000, 这是为什么 ??还有其他什么API能获取已经加载的位图的数据区域指针吗 ??
整个bm结构里数据都正确,唯独bm.bmBits = 0x00000000, 这是为什么 ??还有其他什么API能获取已经加载的位图的数据区域指针吗 ??
//返回值为false 表示获取位图数据失败 ,
bool LoadBitmapFromFile(char *BmpFileName,void *ppvBits,int *len)
{
FILE *fp;
BITMAPFILEHEADER Head;//位图文件头
BITMAPINFOHEADER bih;//位图信息头
BITMAPINFO *pbi = NULL;
BYTE *buffer = NULL;
long bufsize;
//void *ppvBits = NULL;
HBITMAP hBitmap;
{// 打开位图文件
if(strlen(szPath) == 0)
{
ppvBits=NULL;
len=0;
return false;
}
fp = fopen(szPath, "rb");
if(fp == NULL)
{
ppvBits=NULL;
len=0;
return false;
}
}
{// 读位图文件
fread(&Head, 1, sizeof(BITMAPFILEHEADER), fp);
fread(&bih, sizeof(BITMAPINFOHEADER), 1, fp);
if (bih.biBitCount > 8)
{
pbi = new BITMAPINFO;
memset(pbi, 0, sizeof(BITMAPINFO));
}
else
{
if(bih.biClrUsed == 0)
bih.biClrUsed = 256;
bufsize = sizeof(BITMAPINFOHEADER) + bih.biClrUsed * sizeof(RGBQUAD);
buffer = new BYTE[bufsize];
memset(buffer, 0, bufsize);
pbi = (BITMAPINFO*)buffer;
fread(buffer+sizeof(BITMAPINFOHEADER), sizeof(RGBQUAD), bih.biClrUsed, fp);
}
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biWidth = bih.biWidth;
pbi->bmiHeader.biHeight = bih.biHeight;
pbi->bmiHeader.biPlanes = bih.biPlanes;
pbi->bmiHeader.biBitCount = bih.biBitCount;
*len= Head.bfSize - Head.bfOffBits;
ppvBits=new BYTE[Head.bfSize - Head.bfOffBits];
fread(ppvBits, Head.bfSize - Head.bfOffBits, 1, fp);
}
{// 关闭位图文件
fclose(fp);
if (buffer != NULL)
delete[] buffer;
else
delete pbi;
}
return true;
}