如何用VC创建一个24位的位图???

phlx 2004-03-30 05:50:38
如何用VC++创建1个24位的位图呢?CBitmap,CImage都只能创建16位以下,无法创建24位图像。

请问各位高手怎样才能创建一个24位的位图呢?
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyc_nj 2004-04-01
  • 打赏
  • 举报
回复
HBITMAP CreateDIB(int nWidth, int nHeight)
{
BITMAPINFO bmpInfo;
memset(&bmpInfo, 0, sizeof(BITMAPINFO));
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = nWidth;
bmpInfo.bmiHeader.biHeight = nHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 24 ;
bmpInfo.bmiHeader.biCompression = BI_RGB;

CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
HBITMAP hBmp;
void *lpBits;
hBmp = ::CreateDIBSection( MemDC, &bmpInfo, DIB_RGB_COLORS, reinterpret_cast<void **>(&lpBits), NULL, 0);
return hBmp;
}
wrcluomo 2004-04-01
  • 打赏
  • 举报
回复
void CMainFrame::OnFileNewBmp()
{
this->SendMessage(WM_COMMAND,ID_FILE_NEW);
CCh1_1Doc* pDoc=(CCh1_1Doc*) MDIGetActive()->GetActiveView()->GetDocument();
HDIB hNewDIB;
char * upNewBMP;
LPBITMAPINFOHEADER lpBI;
hNewDIB = (HDIB) ::GlobalAlloc(GHND,768*576*3+40);
upNewBMP=( char * )::GlobalLock(hNewDIB);
lpBI=(LPBITMAPINFOHEADER)upNewBMP;
lpBI->biSize=40;
lpBI->biPlanes=1;
lpBI->biBitCount=0;
lpBI->biWidth=768;
lpBI->biHeight=576;
lpBI->biBitCount=24;
lpBI->biSizeImage=768*576*3;
::GlobalUnlock(hNewDIB);
memset(FindDIBBits(upNewBMP),255,::GlobalSize(hNewDIB)-40);
CSize size;
size=pDoc->GetDocSize();
pDoc->ReplaceHDIB(hNewDIB);
pDoc->InitDIBData();
((CCh1_1View *) MDIGetActive()->GetActiveView())->OnInitialUpdate();

}
niejx 2004-03-30
  • 打赏
  • 举报
回复
可以参照BMP文件结构
包括三个部分
应该很简单的

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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