如何调用CreateBitmap创建单色位图?

duanrain 2004-12-28 06:07:16
按照MSDN中描述的,CreateBitmap最后一个参数是以Word对齐的buffer,我创建了一个8x8的可以解决,但是我现在需要创建一个13x13的单色位图,所以分配了13 * 2个Word数组,但是显示不对,请问应该怎么初始化?
最好给出例子,位图内容是13x13正方形的对角线。
!!!注意是单色位图!!!CreateBitmap(w, h, 1, 1, ...)
...全文
235 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanrain 2004-12-29
  • 打赏
  • 举报
回复
确实应该是byte
ishumin 2004-12-28
  • 打赏
  • 举报
回复
每一行的位数要能够被16整除,你要创建的是一行13个象素,后面需要添加3个0。
比如你的第一行象素为:
1,0,0,1,1,0,0,0,1,1,0,1,1,(0,0,0)后面的0是为了对齐添加的。
需要分配的数组不是13×2word,而是13×2BYTE;其中对应第一行的值为:0x98,0xD8
////绘制底面路径imagePath 和 相框路径framePicPath void PaintFramePicture(HDC hDC,RECT rc,CString imagePath,CString framePicPath) { CDC *pDC=new CDC; pDC->Attach(hDC); CString bmpFile; HBITMAP hFgBmp; //画顶层透明位图 CDC DCImage, DCMask; CBitmap Bmp2; //Bmp2.LoadBitmap(IDB_BITMAP2); bmpFile=framePicPath; ///表层框架,相框 hFgBmp = (HBITMAP) LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); Bmp2.Attach(hFgBmp); BITMAP bm; Bmp2.GetBitmap(&bm); int nWidth=bm.bmWidth,nHeight=bm.bmHeight; bmpFile=imagePath;//画底层位图//底层内容 CBitmap Bmp1; hFgBmp = (HBITMAP) LoadImage(NULL,bmpFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION); Bmp1.Attach(hFgBmp); CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&Bmp1); pDC->BitBlt(0,0,nWidth,nHeight,&memDC,0,0,SRCCOPY); DCImage.CreateCompatibleDC(pDC); DCMask.CreateCompatibleDC(pDC); //把图像装入image DC DCImage.SelectObject(&Bmp2); //为“掩码”位图创建一个单色bitmap CBitmap BmpMask; //把mask位图装入mask DC BmpMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); //用透明色创建“掩码”位图 DCMask.SelectObject(&BmpMask); //设置透明色 DCImage.SetBkColor(RGB(0,0,0)); DCMask.BitBlt(0, 0, nWidth, nHeight, &DCImage, 0, 0, SRCCOPY); pDC->BitBlt(0,0, nWidth, nHeight, &DCImage, 0, 0, SRCINVERT); pDC->BitBlt(0,0, nWidth, nHeight, &DCMask, 0, 0, SRCAND); pDC->BitBlt(0,0, nWidth, nHeight, &DCImage, 0, 0, SRCINVERT); delete pDC; }

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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