【关于GDI+绘制平滑的反走样线,刷新显示图像很卡!!!】

大树学长 2014-11-22 05:09:18
http://blog.csdn.net/ximenying/article/details/937027

我用的是这个博客的方法,本来很多锯齿的,用了以后显的很平滑了,但是有一点就是刷新的时候显示很卡,

因为图像要显示运动的过程,经常刷新,
我原来用的是pdc->move to
pdc->line to
刷新的时候一点也不卡看着很流畅,用这个平滑的以后就很卡了

这个是设置平滑的部分代码
CWindowDC dc(this);//this为当前窗口指针
HDC hdc=dc.GetSafeHdc();
using namespace Gdiplus;
Graphics graphics(hdc);
graphics.SetSmoothingMode(SmoothingModeHighQuality);//设置为平滑曲线

在程序结尾的时候我没有释放内存,请问是不是内存没有释放掉所有很卡,怎么才能都释放掉?
...全文
297 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
大树学长 2014-11-25
  • 打赏
  • 举报
回复
引用 10 楼 dingxz105090 的回复:
[quote=引用 9 楼 bigtree_mfc 的回复:] SmoothingModeHighSpeed用起来感觉还不如MoveTo..LineTo... SmoothingModeAntiAlias用起来没有什么变化。 if(m_pGraphics == NULL) { m_pGraphics = new Graphics(hdc); SetSmoothMode....?????这里是怎么破的 Graphics.SetSmoothingMode(。。。)错误 m_pGraphics .SetSmoothingMode(。。。)错误 SetSmoothingMode(。。。)错误 }

if(m_pGraphics == NULL)
{
    CWindowDC dc(this);//this为当前窗口指针
    HDC hdc=dc.GetSafeHdc();
    m_pGraphics = new Graphics(hdc);
    m_pGraphics->SetSmoothingMode(SmoothingModeHighQuality);//设置为平滑曲线
}
MoveTo...
Line To...
可破[/quote] 对额,指针应该用-> 可以运行了,不过结果不理想,没什么变化
凌乱哥 2014-11-25
  • 打赏
  • 举报
回复
引用 9 楼 bigtree_mfc 的回复:
SmoothingModeHighSpeed用起来感觉还不如MoveTo..LineTo... SmoothingModeAntiAlias用起来没有什么变化。 if(m_pGraphics == NULL) { m_pGraphics = new Graphics(hdc); SetSmoothMode....?????这里是怎么破的 Graphics.SetSmoothingMode(。。。)错误 m_pGraphics .SetSmoothingMode(。。。)错误 SetSmoothingMode(。。。)错误 }

if(m_pGraphics == NULL)
{
    CWindowDC dc(this);//this为当前窗口指针
    HDC hdc=dc.GetSafeHdc();
    m_pGraphics = new Graphics(hdc);
    m_pGraphics->SetSmoothingMode(SmoothingModeHighQuality);//设置为平滑曲线
}
MoveTo...
Line To...
可破
大树学长 2014-11-25
  • 打赏
  • 举报
回复
SmoothingModeHighSpeed用起来感觉还不如MoveTo..LineTo... SmoothingModeAntiAlias用起来没有什么变化。 if(m_pGraphics == NULL) { m_pGraphics = new Graphics(hdc); SetSmoothMode....?????这里是怎么破的 Graphics.SetSmoothingMode(。。。)错误 m_pGraphics .SetSmoothingMode(。。。)错误 SetSmoothingMode(。。。)错误 }
凌乱哥 2014-11-25
  • 打赏
  • 举报
回复
最后,加上资源释放,试试参数SmoothingModeAntiAlias
凌乱哥 2014-11-25
  • 打赏
  • 举报
回复

   Graphics graphics( pDC->m_hDC );
   Pen myPen(Color(255,0,0,0),1);
   graphics.SetSmoothingMode(SmoothingModeHighSpeed);//要速度不要质量
   graphics.DrawLine(&myPen,0,0,50,200);

   graphics.SetSmoothingMode(SmoothingModeHighQuality);//高质量
   graphics.DrawLine(&myPen, 50, 0 ,130,200);

//还有一个参数SmoothingModeAntiAlias,估计是折中的意思。速度也要,质量也不能落下。
可以这样,定义时Graphics *m_pGraphics;然后构造函数中:m_pGraphics = NULL;OnPaint中:

if(m_pGraphics == NULL)
{
     m_pGraphics = new Graphics(hdc);
     SetSmoothMode....
}
MoveTo..
LineTo...

大树学长 2014-11-25
  • 打赏
  • 举报
回复
引用 5 楼 dingxz105090 的回复:
会不会是你这些GetSafeHdc、SetSmoothMode浪费时间了,你可以试试在初始化就SetSmoothMode,然后后面就只需moveto lineto了,这样的话你要把Graphics graphics(hdc);设置为成员变量了,不能是局部变量 释放资源: graphics.ReleaseHDC( hdc); DeleteDC(hdc);
感觉有点道理,不过怎么在,h中申明Graphics graphics(hdc);?试了半天都有问题
大树学长 2014-11-24
  • 打赏
  • 举报
回复
怎么释放内存???????
凌乱哥 2014-11-24
  • 打赏
  • 举报
回复
会不会是你这些GetSafeHdc、SetSmoothMode浪费时间了,你可以试试在初始化就SetSmoothMode,然后后面就只需moveto lineto了,这样的话你要把Graphics graphics(hdc);设置为成员变量了,不能是局部变量 释放资源: graphics.ReleaseHDC( hdc); DeleteDC(hdc);
大树学长 2014-11-24
  • 打赏
  • 举报
回复
怎么释放内存啊??????? 我想鱼和熊掌都得
大树学长 2014-11-23
  • 打赏
  • 举报
回复
引用 1 楼 chenlycly 的回复:
是这样的,gdi+相对gdi的绘图效果要好不少,但是效率却比gdi慢不少。 我们在绘制复杂的图形时,也遇到gdi+函数执行比较卡的问题。
那怎么弄,用别的线条显示很不平滑,用GDI+很平滑但又卡了
dvlinker 2014-11-22
  • 打赏
  • 举报
回复
是这样的,gdi+相对gdi的绘图效果要好不少,但是效率却比gdi慢不少。 我们在绘制复杂的图形时,也遇到gdi+函数执行比较卡的问题。

19,468

社区成员

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

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