如何将在static[即静态文本]上绘制的图形保存成磁盘文件?

ljp795 2007-11-07 10:11:01
如何将在picture1图形控件上绘制的图形保存成磁盘文件? 在VB论坛中有人提问。可是我用的是VC.不知哪位高手能指点一下.

我static把静态文本拉大拉宽,用画点.描线的方法把一个数据文件中的曲线画到static.现在要把画在static中内容另存为图形文件到硬盘上.

请高手帮帮忙啊,我现在还是个菜鸟.谢谢啦
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmanzhao 2007-11-16
  • 打赏
  • 举报
回复
你把
 if(!m_dcMem.m_hDC)
m_dcMem.CreateCompatibleDC(pMemDC);

这句换成
CDC m_dcMem;
m_dcMem.CreateComptibleDC(pMemDC);

就可以了。
oldmanzhao 2007-11-16
  • 打赏
  • 举报
回复
m_dcMem是一个CDC的变量,我这里是一个成员变量,你给他定义成局部变量就可以了。
ljp795 2007-11-15
  • 打赏
  • 举报
回复
我还是没搞成啊。说m_dcMem没有定义.
okoooo说:
用GDI+方便写,而且能保存成多种编码的图片不知道
不知能否举个例子啊.谢谢.
okoooo 2007-11-08
  • 打赏
  • 举报
回复
用GDI+方便写,而且能保存成多种编码的图片
ljp795 2007-11-08
  • 打赏
  • 举报
回复
谢谢 oldmanzhao 。我试试看.
oldmanzhao 2007-11-07
  • 打赏
  • 举报
回复
基本方法是先用保存DC的办法抓图,然后获取其中的BITMAP对象,用GetDIBits函数得到位图的数据,写一个位图的文件头和信息头,将两个结构与位图数据一起写到文件里。给你个代码吧,这个是截全屏的,你自己稍微修改一下就可以截取你想要的内容了。

CClientDC dc(this);
CDC *pMemDC = GetDesktopWindow()->GetWindowDC();

CBitmap bmp;
bmp.CreateCompatibleBitmap(pMemDC,1440,900);
if(!m_dcMem.m_hDC)
m_dcMem.CreateCompatibleDC(pMemDC);
m_dcMem.SelectObject(&bmp);
m_dcMem.BitBlt(0,0,1440,900,pMemDC,0,0,SRCCOPY);

dc.BitBlt(0,0,1440,900,&m_dcMem,0,0,SRCCOPY);


BYTE *pBits = NULL;
BITMAPINFO bmi;
BITMAPFILEHEADER bmfh;

::ZeroMemory(&bmi,sizeof(BITMAPINFO));
::ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));

//create bitmap file
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = 1440;
bmi.bmiHeader.biHeight = 900;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
bmi.bmiHeader.biSizeImage = 0;
bmi.bmiHeader.biXPelsPerMeter = 0;
bmi.bmiHeader.biYPelsPerMeter = 0;
bmi.bmiHeader.biClrUsed = 0;
bmi.bmiHeader.biClrImportant = 0;

HBITMAP hBitMap = NULL;
BITMAP bm;
bmp.GetBitmap(&bm);
DWORD dwBytes = bm.bmWidthBytes * bm.bmHeight ;

LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,dwBytes);
HDC hdcMem = ::CreateCompatibleDC(dc.m_hDC);
CBitmap * pOldBitmap = m_dcMem.GetCurrentBitmap();

GetDIBits(m_dcMem,bmp,0,900,lpData,&bmi,DIB_RGB_COLORS);




bmfh.bfType = 0x4D42;
bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmfh.bfSize = bmfh.bfOffBits + (1440 * 900) * 32 / 8;

TCHAR szBMPFileName[128];
int iBMPBytes = 1440 * 900 * 32 / 8;
_tcscpy(szBMPFileName,_T("C:\\screen.bmp"));

CFile file;
if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
{
file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
file.Write(&(bmi.bmiHeader),sizeof(BITMAPINFOHEADER));
file.Write(lpData,dwBytes);
file.Close();
}
GlobalFreePtr(lpData);
Yofoo 2007-11-07
  • 打赏
  • 举报
回复
就是抓图, 找抓图,很多

19,469

社区成员

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

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