我花出的图片为什么只有黑白两种颜色???

qin_wei 2004-04-09 04:08:28
下边这段代码是读一个20X20的位图到内存dc然后把它在bitblt窗口上,为什么我画出来的图像是黑白的?
void CGoushengDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HWND h=GetSafeHwnd();
HDC hdc = ::GetDC(h);
FILE* fp;
BITMAPFILEHEADER BMFHTemp;
LPBITMAPINFO pBMITemp;
LPVOID pBits;
fp = fopen("c:\\dummy.bmp","rb");
//读文件头
fread((void*)&BMFHTemp,sizeof(BITMAPFILEHEADER),1,fp);
//读信息头
int bminfolen = BMFHTemp.bfOffBits -sizeof(BITMAPFILEHEADER);
pBMITemp = (LPBITMAPINFO)malloc(bminfolen);
fread((void*)pBMITemp,bminfolen,1,fp);
//读数据
int bitlen = BMFHTemp.bfSize - BMFHTemp.bfOffBits;
pBits = malloc(bitlen);
fread(pBits,bitlen,1,fp);

//创建内存dc和bmp
HDC hmemdc= CreateCompatibleDC(hdc );
HBITMAP hmembmp=CreateCompatibleBitmap(hmemdc, 20, 20);

SetDIBits( hmemdc, hmembmp,0, 20, pBits, pBMITemp, pBMITemp->bmiHeader.biClrUsed );
HBITMAP holdbmp = (HBITMAP)::SelectObject(hmemdc,hmembmp);
//
::BitBlt(hdc,100,100,20,20,hmemdc,0,0,SRCCOPY);
::SelectObject(hmemdc,holdbmp);
DeleteDC(hmemdc);
DeleteObject(hmembmp);

::ReleaseDC(h,hdc);
free((void*)pBMITemp);
free(pBits);
fclose(fp);
}
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qin_wei 2004-04-09
  • 打赏
  • 举报
回复
找到问题了,createbitmap写错了
快乐鹦鹉 2004-04-09
  • 打赏
  • 举报
回复
你的图像是几位的?如果低于8位,那么你的调色板在哪里?你的程序没有考虑调色板。

19,468

社区成员

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

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