如何将ONDRAW函数画出来的图象保存为BMP文件? 在ONDRAW函数中用SETPIXEL函数画了一幅每行128个点*96行的图象,现在我想把它存储为BMP文件不知道怎么实现?! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString fileName = "new.bmp" CDC* pDC = GetDC(); CDC dc; RECT rect; CBitmap bmp; dc.CreateCompatibleDC(pDC); GetClientRect(&rect); bmp.CreateCompatibleBitmap(pDC, rect.right, rect.bottom); CBitmap* pOldBmp = dc.SelectObject(&bmp); dc.BitBlt(0, 0, rect.right, rect.bottom, pDC,0,0,SRCCOPY); dc.SelectObject(pOldBmp); BITMAP bitmap; bmp.GetBitmap(&bitmap); DWORD size = bitmap.bmWidthBytes*bitmap.bmHeight; LPSTR lpData = (LPSTR)malloc(size); BITMAPINFOHEADER bih; bih.biBitCount = bitmap.bmBitsPixel; bih.biClrImportant = 0; bih.biClrUsed = 0; bih.biCompression = 0; bih.biHeight = bitmap.bmHeight; bih.biPlanes = 1; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biSizeImage = size; bih.biWidth = bitmap.bmWidth; bih.biXPelsPerMeter = 0; bih.biYPelsPerMeter = 0; GetDIBits(*pDC,bmp,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS); BITMAPFILEHEADER bfh; bfh.bfReserved1 = bfh.bfReserved2 = 0; bfh.bfType = ((WORD)('M'<< 8)|'B'); bfh.bfSize = 54+size; bfh.bfOffBits = 54; CFile file; if(file.Open(fileName,CFile::modeCreate|CFile::modeWrite)) { file.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER)); file.WriteHuge(&bih,sizeof(BITMAPINFOHEADER)); file.WriteHuge(lpData,size); file.Close(); } free(lpData); 谢谢 lpq1981() ,但是你的是把整个客户区都画进去了,我只是要画有图象的块,比如(100,100),(500,600)为顶点的矩形区域。能不能给点注释,好让我修改一下! 我改了一下好象并没有用,minotaurus(弥诺陶络斯) (能否讲的详细点! MFC刚刚起步 SEH代码的编译错误,如何改正? 请教高手们一个关于CScrollView的问题 菜鸟想做视频聊天室~~~~~~~~请高手进来指点 找不到窗口类别是什么错误呀。 一个菜鸟问题! 怎么实现像VC调试窗口中的树形表格?高分重酬。急!! CSDN有高手吗?太业余了,每天回答一些初学者的简单问题,也算专家? 菜鸟问题:初始化代码放在哪? VS c#实现 一列按钮 按下其中一个 展开一个框,其余按钮下移腾出位置 重分求助:udp和tcp/ip通信怎样获取对方的ip和端口号(贡献突出者再加) vc告急 高手指教
CDC* pDC = GetDC();
CDC dc;
RECT rect;
CBitmap bmp;
dc.CreateCompatibleDC(pDC);
GetClientRect(&rect);
bmp.CreateCompatibleBitmap(pDC, rect.right, rect.bottom);
CBitmap* pOldBmp = dc.SelectObject(&bmp);
dc.BitBlt(0, 0, rect.right, rect.bottom, pDC,0,0,SRCCOPY);
dc.SelectObject(pOldBmp);
BITMAP bitmap;
bmp.GetBitmap(&bitmap);
DWORD size = bitmap.bmWidthBytes*bitmap.bmHeight;
LPSTR lpData = (LPSTR)malloc(size);
BITMAPINFOHEADER bih;
bih.biBitCount = bitmap.bmBitsPixel;
bih.biClrImportant = 0;
bih.biClrUsed = 0;
bih.biCompression = 0;
bih.biHeight = bitmap.bmHeight;
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = size;
bih.biWidth = bitmap.bmWidth;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
GetDIBits(*pDC,bmp,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0;
bfh.bfType = ((WORD)('M'<< 8)|'B');
bfh.bfSize = 54+size;
bfh.bfOffBits = 54;
CFile file;
if(file.Open(fileName,CFile::modeCreate|CFile::modeWrite))
{
file.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
file.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
file.WriteHuge(lpData,size);
file.Close();
}
free(lpData);