社区
图形处理/算法
帖子详情
IPicture如何实现双缓存
strategycn
2007-10-11 11:10:18
我最近正写一个屏保程序,用IPicture技术显示jpg格式的图像,但是在让图片在窗口上移动时闪的很厉害,因为要重绘背景,所以想用网上说了很多的双缓存技术,可是,看了很多,双缓存技术好像只是针对bmp格式的,我现在将jpg图片(通过IPicture的Render函数)画到另外一个临时dc中,然后如何将它拷贝到将要显示的dc中呢(窗口dc或显示屏dc)??!高手们帮帮我吧,这几天头发都想白了....分不多,就这点了....
...全文
187
10
打赏
收藏
IPicture如何实现双缓存
我最近正写一个屏保程序,用IPicture技术显示jpg格式的图像,但是在让图片在窗口上移动时闪的很厉害,因为要重绘背景,所以想用网上说了很多的双缓存技术,可是,看了很多,双缓存技术好像只是针对bmp格式的,我现在将jpg图片(通过IPicture的Render函数)画到另外一个临时dc中,然后如何将它拷贝到将要显示的dc中呢(窗口dc或显示屏dc)??!高手们帮帮我吧,这几天头发都想白了....分不多,就这点了....
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
linwc03
2010-12-18
打赏
举报
回复
strategycn:
你好!我用了近一个星期的时间编一个IPicture显示数据库JPG图片,但能显示和正常操作,但移动图像时闪烁得严厉。也用了你所说的的方法,有建兼容DC,兼容位图和选入对象,怎么一移动就没有了图像!下面是我写的源码,望赐教,多谢:
void CShowMax::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
if (m_IsShow==TRUE)
{
CPaintDC dc(this); //重绘的设备上下文
CBitmap bitmap; //定义一个位图对象
bitmap.CreateCompatibleBitmap(&dc,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
CDC dcMem; //定义一个内存DC(显示设备)对象
dcMem.CreateCompatibleDC(&dc);
//因为只有为它选进位图这个gdi对象才可以绘图的,希望不要有人再走我这么多冤枉路了
//bitmap.CreateCompatibleBitmap (&dc,m_width,m_height);
SelectObject(dc,bitmap);
//CBitmap* pOldBitmap = dcMem.SelectObject (&bitmap);
if(dcMem==NULL)MessageBox("没有图像");
//用dcMem画图
int vpos = GetScrollPos(SB_VERT);
int hpos = GetScrollPos(SB_HORZ);
m_picture1->Render(dcMem,1-hpos,1-vpos,(int)(m_width/26.45),(int)(m_height/26.45),0,m_height,m_width,-m_height,NULL);
dc.BitBlt(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),&dcMem,0,0,SRCCOPY);
// CDC * dc= GetDC();
//int vpos = GetScrollPos(SB_VERT);
//int hpos = GetScrollPos(SB_HORZ);
// m_picture1->Render(*dc,1-hpos,1-vpos,(int)(m_width/26.45),(int)(m_height/26.45),0,m_height,m_width,-m_height,NULL);
//dc.BitBlt(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),&MemDC,0,0,SRCCOPY);
}
}
另:你能把你苦心所写双缓冲源码发一份给我学习一下吗?谢谢!
stlnkm
2008-12-03
打赏
举报
回复
多谢楼主
strategycn
2007-10-12
打赏
举报
回复
p=new CPicture("map//0.jpg");
...
CPaintDC dc(this);
CDC MemDC;
MemDC.CreateCompatibleDC(&dc);
p->ShowPicture(MemDC);
dc.BitBlt(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),&MemDC,0,0,SRCCOPY);
在这里我封装了个CPicture类,里面封装了IPicture读取图片的一些函数,ShowPicture函数里就是包裹了IPicture.Render函数,可以上
代码运行起来,什么图片也看不到,可是直接用p->ShowPicture(dc)是可以显示的,yxz_lp能解释一下吗??
strategycn
2007-10-12
打赏
举报
回复
我试了,好像不行,我再去试一下吧,谢谢你的回答!!
yxz_lp
2007-10-12
打赏
举报
回复
双缓冲技术应该和IPicture或bmp应该没用什么关系,你只要创建一个兼容dc,再把IPicture.Render到兼容dc,最后
再用BitBlt()把兼容dc拷贝到当前dc。
strategycn
2007-10-12
打赏
举报
回复
唉,怎么没人帮我啊??自己顶啊,唉.......
strategycn
2007-10-12
打赏
举报
回复
晕了一下午,终于郁闷出来了,原来是可以实现的,只是我少了一个步骤,汗啊...
只要在p- >ShowPicture(MemDC); 前加上
hbitmap=CreateCompatibleBitmap(dc.m_hDC,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
SelectObject(MemDC.m_hDC,hbitmap);
因为只有为它选进位图这个gdi对象才可以绘图的,希望不要有人再走我这么多冤枉路了...
自己拿分了,呵呵.....
strategycn
2007-10-12
打赏
举报
回复
有没有办法在内存中将图片格式转化为bmp呢?那样就可以像直接操作位图一样操作了....实在没办法
,我都想用.net中的CImage类了,不知道在vc6.0种引用它放不方便,谢谢你的关注,我也继续试下...
yxz_lp
2007-10-12
打赏
举报
回复
我也试过了,我这想当然的办法是不行,继续帮你关注。
strategycn
2007-10-11
打赏
举报
回复
要断网了,自己再来顶一下,高手快施救吧。。。。。
MFC结合I
Pic
tu
re
实现
多格式图像显示与处理
现在我们知道怎么加载和绘制了,但如何让它真正融入UI?最简单的方式是继承CStatic,重写其绘制逻辑。public:protected:private:这里有两个关键技巧:拦截:返回TRUE表示已处理,阻止系统自动擦背景使用触发重绘:当图像更新时自动刷新完整的OnPaint如下:CRect rect;CDC memDC;// 可选背景色} else {// 回退到默认行为。
UI和其他
小问题,关于树控件,选中的问题?就是怎么得到当前选中项怎样在标题栏上添加自己的button或其他控件请问显示桌面按钮触发的Windows消息是什么?哪位有像Windows2000任务管理器中性能的那个曲线图的源代码。控件中如何使用
双
缓存
?怎么把ShockWaveFlash控件上发生的鼠标右键捕获,并替换成鼠标左键事件?用C++AndAPI写对话框程序请问:如何使MDI程序一次只打开一种文档?有没有
基于MFC
实现
Word文档创建与操作的完整项目实战
MFC(Microsoft Foundation Classes)是微软基于C++封装的一套Windows应用程序开发类库,极大简化了Win32 API的复杂性。在Office自动化场景中,MFC通过集成OLE(Object Linking and Embedding)技术,
实现
对Word、Excel等应用的程序化控制。OLE自动化基于COM(Component Object Model)机制,允许客户端通过IDispatch接口动态调用远程对象方法。
[OpenGL] 简单二维粒子系统——烟花,喷水,落叶
参考代码:http://download.csdn.net/detail/blue6333589/6785389 在这个代码的基础上扩展了二维粒子系统的框架,该系统由一个发射器类和一个粒子类组成,作为编程练习而言,我们只
实现
了最基本的粒子系统功能,但是已经可以做出一些效果了。 在这里,通过调节参数给出了在这个框架下烟花、喷水、落叶的代码,参考代码
实现
的是飘雪
基于Duilib的RichEdit控件增强聊天窗口功能实战
Duilib是一款基于C++开发的轻量级、高性能界面库,广泛应用于国内主流客户端软件中。其核心优势在于灵活的控件扩展机制与XML驱动的布局系统,使得开发者能够高效构建复杂的用户界面。本章详细阐述了RichEdit控件在Duilib框架中的基础使用与属性配置,涵盖了控件创建、样式控制、滚动行为与光标管理等多个核心模块。通过具体代码示例与结构分析,帮助开发者理解RichEdit控件在实际项目中的集成与定制方法。下一章将围绕表情符号插入
实现
机制。
图形处理/算法
19,466
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章