在线急等,怎样将vc对话框控件static绘制的图形保存为BMP文件
请高手指点,我在vc对话框static控件里绘制了一幅图形,怎样将它保存为BMP文件!!高分急盼呀您说的这个对文档绘图区域保存还管用些,我试过,但是对我用对话框控件所绘制...
请高手指点,我在vc对话框static控件里绘制了一幅图形,怎样将它保存为BMP文件!!
高分急盼呀
您说的这个对文档绘图区域保存还管用些,我试过,但是对我用对话框控件所绘制的图形保存不了呀 展开
高分急盼呀
您说的这个对文档绘图区域保存还管用些,我试过,但是对我用对话框控件所绘制的图形保存不了呀 展开
展开全部
参照下面代码:
BOOL SaveBitmapToFile(CString strFileName)
{
CDC dc;
dc.CreateDC((LPCTSTR)"DISPLAY",NULL,NULL,NULL);
CBitmap bm;
int Width=GetSystemMetrics(SM_CXSCREEN);
int Height=GetSystemMetrics(SM_CYSCREEN);
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
if(lpData != NULL)
{
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
GetDIBits(dc.m_hDC,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<<8)|'B');
bfh.bfSize=sizeof(bfh)+size;
bfh.bfOffBits=sizeof(bfh);
CFile bf;
if(bf.Open(strFileName,CFile::modeCreate|CFile::modeWrite))
{
bf.Write(&bfh,sizeof(BITMAPFILEHEADER));
bf.Write(&bih,sizeof(BITMAPINFOHEADER)); //要把打包的代码改为这样.
bf.Write(lpData,size);
bf.Close();
}
::GlobalFree(lpData);
}
dc.DeleteDC();
return TRUE;
}
BOOL SaveBitmapToFile(CString strFileName)
{
CDC dc;
dc.CreateDC((LPCTSTR)"DISPLAY",NULL,NULL,NULL);
CBitmap bm;
int Width=GetSystemMetrics(SM_CXSCREEN);
int Height=GetSystemMetrics(SM_CYSCREEN);
bm.CreateCompatibleBitmap(&dc,Width,Height);
CDC tdc;
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
if(lpData != NULL)
{
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
GetDIBits(dc.m_hDC,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<<8)|'B');
bfh.bfSize=sizeof(bfh)+size;
bfh.bfOffBits=sizeof(bfh);
CFile bf;
if(bf.Open(strFileName,CFile::modeCreate|CFile::modeWrite))
{
bf.Write(&bfh,sizeof(BITMAPFILEHEADER));
bf.Write(&bih,sizeof(BITMAPINFOHEADER)); //要把打包的代码改为这样.
bf.Write(lpData,size);
bf.Close();
}
::GlobalFree(lpData);
}
dc.DeleteDC();
return TRUE;
}
展开全部
CStatic::GetBitmap
Gets the handle of the bitmap, previously set with SetBitmap, that is associated with CStatic.
HBITMAP GetBitmap( ) const;
--------------------------------------------------
CBitmap::FromHandle
Returns a pointer to a CBitmap object when given a handle to a Windows GDI bitmap.
static CBitmap* PASCAL FromHandle(
HBITMAP hBitmap
);
---------------------------------------------------
再配合LS的函数,稍微修改一下应该可以搞掂
Gets the handle of the bitmap, previously set with SetBitmap, that is associated with CStatic.
HBITMAP GetBitmap( ) const;
--------------------------------------------------
CBitmap::FromHandle
Returns a pointer to a CBitmap object when given a handle to a Windows GDI bitmap.
static CBitmap* PASCAL FromHandle(
HBITMAP hBitmap
);
---------------------------------------------------
再配合LS的函数,稍微修改一下应该可以搞掂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询