社区
图形处理/算法
帖子详情
请教大家如何拷贝子窗口所绘制的图形呢?
cxfirefox
2004-12-14 02:39:08
在MFC中,想要拷贝子窗口所绘制的图形,并存为BMP文件应该怎么办呢?
...全文
196
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/C++
图形
库EasyX快速上手指南【1】——绘图
窗口
和基本
图形
文字
绘制
适合初学C/C++代码操练和项目实战的
图形
界面编程介绍,让初学者不用深入学习Turbo C, OpenGL等绘图算法或
图形
学语言也能快速上手,制作出属于自己的编程作品~
MFC开发:
图形
的
绘制
本文主要介绍MFC中
图形
的简单
绘制
。
HarmonyOS 实战开发 —— 基于Drawing的
图形
/文字
绘制
及双缓冲模拟实现刷新
支撑用户设置排版风格和文本风格,可调用OH_Drawing_TypographyHandlerAddText添加文本并调用OH_Drawing_TypographyLayout和OH_Drawing_TypographyPaint对文本进行排版和
绘制
。支撑具备自排版能力的用户将排版结果构造为OH_Drawing_TextBlob并调用OH_Drawing_CanvasDrawTextBlob
绘制
OH_Drawing_TextBlob描述的文本块。此步骤需要在napi_init的过程中处理。
【DND
图形
库】三、创建
窗口
和
绘制
精灵
三、创建
窗口
和
绘制
精灵与文本 (甲)创建
窗口
代码如下,很简明,通过调用一系列SetWindow函数: virtual void _init() override {//初始化 sys->SetWindowTitle(L"教程01");//设置
窗口
标题 sys->SetWindowStyle(WS_OVERLAPPEDWINDOW);//设置
窗口
样式 sys->Se...
NCurses
子
窗口
与复制技巧:深入理解
本文深入探讨了NCurses库中的
子
窗口
操作和文本复制技巧。介绍了
子
窗口
的颜色和文本属性,以及父
窗口
与
子
窗口
之间的关系。详细说明了
子
窗口
的复制功能,包括overlay、overwrite和copywin函数的使用方法和区别。通过代码示例和可视化辅助,使读者能够更好地理解和应用这些
窗口
操作技术。
图形处理/算法
19,463
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章