CreateDIBSection的问题

渔村居士 2009-04-10 03:02:23
CDC *pDC;
CBitmap bitmap;
HBITMAP hBmp=NULL;
LPVOID lpBits=NULL;
CBitmap *pOldBitmap;
pDC=new CDC;
pDC->CreateCompatibleDC(&pdc);
// pDC->Attach(hdc);
//用CreateDIBSection()分配图像数据内存
hBmp=CreateDIBSection(pdc.GetSafeHdc(), //兼容DC句柄
(PBITMAPINFO)&bmpinfo, //位图信息头
DIB_RGB_COLORS, //色彩类型
&lpBits, //数据内存指针
// &lpBits,
NULL,0);

if(hBmp==NULL)////////////////////////////////////////////////////////////////////
{
pDC->DeleteDC();
MessageBox(NULL,"Error!","Tips",MB_OK);
return false;
}

// ASSERT(hBmp!=NULL);
bitmap.Attach(hBmp);
pOldBitmap = pDC->SelectObject(&bitmap);

pDC->SetBkMode(TRANSPARENT);
memcpy(lpBits,str,size);

为什么使用CreateDIBSection函数会失败呢?程序到//////////////这一行就死了,hBmp是空的.
...全文
503 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
渔村居士 2009-04-11
  • 打赏
  • 举报
回复
bmpinfo:

LPCTSTR lpszFileName=_T("4.bmp");//文件路径
CFile file;//用于读取BMP文件
BITMAPFILEHEADER bfhHeader;//bmp文件头
BITMAPINFOHEADER bmiHeader; //bmp格式头
LPBITMAPINFO lpBitmapInfo;//bmp格式具体信息
int bmpWidth=0;//图片宽度
int bmpHeight = 0;//图片高度      
if(!file.Open(lpszFileName,CFile::modeRead))
{
MessageBox(_T("文件打开失败!"),_T("Error!"),MB_OK|MB_ICONWARNING);
return ;//打开文件
}
file.Read(&bfhHeader,sizeof(BITMAPFILEHEADER));//读取文件头
if(bfhHeader.bfType!=((WORD)('M'<<8)|'B'))//判断是否是"BM"
return ;
if(bfhHeader.bfSize!=file.GetLength())
return ;
if (file.Read((LPSTR)&bmiHeader, sizeof(bmiHeader))!= sizeof(bmiHeader))
return ;
bmpHeight = bmiHeader.biHeight;//得到高度和宽度
bmpWidth = bmiHeader.biWidth;
file.SeekToBegin();
file.Read(&bfhHeader,sizeof(BITMAPFILEHEADER));
UINT uBmpInfoLen=(UINT) bfhHeader.bfOffBits-sizeof(BITMAPFILEHEADER);
lpBitmapInfo=(LPBITMAPINFO) new BYTE[uBmpInfoLen];
file.Read((LPVOID) lpBitmapInfo,uBmpInfoLen);
if((* (LPDWORD)(lpBitmapInfo))!=sizeof(BITMAPINFOHEADER))
return ;
DWORD size=bfhHeader.bfSize - bfhHeader.bfOffBits;
char *lpSrcBits=(char *)new BYTE[size];//将数据读入lpSrcBits数组
file.ReadHuge(lpSrcBits,size);
file.Close();
渔村居士 2009-04-11
  • 打赏
  • 举报
回复
hlogin是对话框上一个picutre控件句柄
渔村居士 2009-04-11
  • 打赏
  • 举报
回复

pdc的值是这样的:

CDC pdc;
pdc.Attach(::GetDC(hlogin));
菜牛 2009-04-11
  • 打赏
  • 举报
回复
函数调用失败先用GetLastError看一下出错代码;基本上都是参数错误所致,最好把位图信息头部分代码贴出。
cnzdgs 2009-04-11
  • 打赏
  • 举报
回复
bmpinfo就是上面的lpBitmapInfo吗?如果是,就把CreateDIBSection的第2参数改成bmpinfo:
hBmp=CreateDIBSection(pdc.GetSafeHdc(), //兼容DC句柄
(PBITMAPINFO)& bmpinfo, //位图信息头
DIB_RGB_COLORS, //色彩类型
&lpBits, //数据内存指针
// &lpBits,
NULL,0);
cnzdgs 2009-04-10
  • 打赏
  • 举报
回复
pdc和bmpinfo都是怎么来的?
zzz822163 2009-04-10
  • 打赏
  • 举报
回复
bmpinfo, //位图信息头
它的值对吗?

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧