社区
图形处理/算法
帖子详情
请教大家如何拷贝子窗口所绘制的图形呢?
cxfirefox
2004-12-14 02:39:08
在MFC中,想要拷贝子窗口所绘制的图形,并存为BMP文件应该怎么办呢?
...全文
117
8
打赏
收藏
请教大家如何拷贝子窗口所绘制的图形呢?
在MFC中,想要拷贝子窗口所绘制的图形,并存为BMP文件应该怎么办呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yaozijian110
2004-12-16
打赏
举报
回复
我已经把程序发到你的邮箱了,请查收。
cxfirefox
2004-12-15
打赏
举报
回复
首先得到子窗体的BMP,得到dc即可得到bmp。
这一段怎么实现呢?我是个菜鸟,请多加指点
cxfirefox
2004-12-15
打赏
举报
回复
哦,多谢几位指点,我的email是:cxfirefox@hotmail.com,一会我就去试试看,如果有问题,再来请教各位,谢谢了!
yaozijian110
2004-12-15
打赏
举报
回复
我认为使用BitBlt()函数复制窗口内容,除了窗口内容是动态的情况(如播放VCD的窗口)外,都是可以正确工作的。
yaozijian110
2004-12-15
打赏
举报
回复
我写了个程序实现了保存子窗体内存到BMP文件,主要部分代码如下:
HBITMAP CPicSaveDoc::CopyActivateView()
{
POSITION pos;
CView *pView;
CDC *pDC;
RECT rect;
int width,height;
pos = GetFirstViewPosition();
pView = GetNextView(pos);
pDC = pView->GetDC();
pView->GetClientRect(&rect);
width = rect.right - rect.left;
height = rect.bottom - rect.top;
m_hMemDC = CreateCompatibleDC(pDC->m_hDC);
m_hBitmap = CreateCompatibleBitmap(pDC->m_hDC,width,height);
SelectObject(m_hMemDC,m_hBitmap);
BitBlt(m_hMemDC,0,0,width,height,pDC->m_hDC,0,0,SRCCOPY);
return m_hBitmap;
}
BOOL CPicSaveDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
int height;
HDIB hDib;
BITMAP bitmap;
BITMAPINFO *pbmi;
PBYTE pBits;
//复制活动视图内容到m_hBitmap
CopyActivateView();
//把 m_hBitmap转化为 DIB(设备无关位图)
GetObject(m_hBitmap,sizeof(BITMAP),&bitmap);
height = bitmap.bmHeight;
pbmi = (BITMAPINFO *)malloc(sizeof(BITMAPINFO) + bitmap.bmWidthBytes * bitmap.bmHeight);
pBits = (PBYTE)pbmi + sizeof(BITMAPINFO);
pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biBitCount = bitmap.bmBitsPixel;
pbmi->bmiHeader.biWidth = bitmap.bmWidth;
pbmi->bmiHeader.biHeight = bitmap.bmHeight;
pbmi->bmiHeader.biPlanes = 1;
pbmi->bmiHeader.biCompression = BI_RGB;
GetDIBits(m_hMemDC,
m_hBitmap,
0,
height,
pBits,
pbmi,
DIB_RGB_COLORS);
//用 《Windows 程序设计》第 16章提供的函数库来保存位图
hDib = DibCopyFromPackedDib(pbmi);
DeleteDC(m_hMemDC);
DeleteObject(m_hBitmap);
if (hDib)
{
if (DibFileSave(hDib,lpszPathName))
MessageBox(NULL,TEXT("保存位图成功"),TEXT("提示"),MB_OK | MB_ICONINFORMATION);
else
MessageBox(NULL,TEXT("保存位图失败"),TEXT("错误"),MB_OK | MB_ICONWARNING);
}
else
MessageBox(NULL,TEXT("保存位图失败"),TEXT("错误"),MB_OK | MB_ICONWARNING);
if (hDib)
DibDelete(hDib);
return TRUE;
}
程序用《Windows 程序设计》第16章提供的函数库实现保存DIB为BMP文件的功能。
但是还有个小毛病:如果复制窗口内容的时候,别的窗口,比如说保存文件对话框
挡在子窗口上面的话,那么就会把别的窗口表面复制下来,结果位图文件的部分内容就
不是子窗口内容了。
如果需要例子程序的话,请留下E-mail。
cxfirefox
2004-12-15
打赏
举报
回复
子窗体上并不是一个打开的BMP文件,而是利用opengl直接绘制好的一些图形,如何将他们保存为BMP文件呢?
真的李小龙
2004-12-14
打赏
举报
回复
首先得到子窗体的BMP,得到dc即可得到bmp。
用GetObject(sizeog(BITMAP),&bm)得到bmp的参数[bm为BITMAP对象]
然后用自己写的bmp类获得数据,并保存。
关于bmp类,可以搜索一些bmp到jpg等的转换等
cxfirefox
2004-12-14
打赏
举报
回复
就是将在子窗体上绘制的内容存为BMP,应该怎么办呢?请大家指点!
C#基于表达式(Expression)实现对象深
拷贝
C#基于表达式(Expression)实现对象深
拷贝
,包含了核心类及示例数据。这是一个比较简单的帮助类,可作学习参考
塞外古刹-贝
子
庙导游词.doc
塞外古刹-贝
子
庙导游词.doc
内蒙古自治区赤峰敖汉旗贝
子
府镇.doc
内蒙古自治区赤峰敖汉旗贝
子
府镇.doc
详解Python直接赋值,深
拷贝
和浅
拷贝
直接赋值: 对象的引用,也就是给对象起别名 浅
拷贝
:
拷贝
父对象,但是不会
拷贝
对象的内部的
子
对象。 深
拷贝
:
拷贝
父对象. 以及其内部的
子
对象 在之前的文章中,提到可变对象和不可变对象,接下来也是以这两者的区别...
精品资料(2021-2022年收藏)内蒙古自治区赤峰敖汉旗贝
子
府镇.doc
教育资料
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章