我用LoadImage和LoadBitmap加载了位图资源。 当我想获得指向位图像素数据的指针时,我用GetObject(hBitmap, sizeof(bm), &bm);
整个bm结构里数据都正确,唯独bm.bmBits = 0x00000000, 这是为什么 ??还有其他什么API能获取已经加载的位图的数据区域指针吗 ??
整个bm结构里数据都正确,唯独bm.bmBits = 0x00000000, 这是为什么 ??还有其他什么API能获取已经加载的位图的数据区域指针吗 ??
解决方案 »
- 求教ADO数据库编程的问题
- MFC调用其它进程,实现右键菜单
- 请问,哪个API函数或者MFC函数能立刻检测到本机的网络中断呢?
- 关于CListCtrl控件的问题
- 用过 Skin++ skinplusplus 垃圾的 skin++ skinplusplus
- 求助:关于string::find和string::rfind问题
- 公司给我一个项目的源码,有很多类,请问怎样用ROSE或Visual Modeler来理清各个类的关系?!或者你有其他更好的方法?!
- 为什么KillTimer失败?
- 请问如何知道一个EXE文件里用了哪些MFC函数?
- 如何将二进制形式文件转化成ASC2码形式文件?
- if 条件为真却不执行!!??
- 奇怪的问题 ocx 控件 提示无法从模块获取资源
//返回值为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;
}