gdi+ bitmap释放资源 20
以为要同时绘制一批图片,绘制速度实在太慢,所以我想了一种绘制缩略图的方式,结果速度有所提高,但是还是比较慢,为此我又想了一种办法就是先创建一个bitmap,然后反复在bi...
以为要同时绘制一批图片,绘制速度实在太慢,所以我想了一种绘制缩略图的方式,结果速度有所提高,但是还是比较慢,为此我又想了一种办法就是先创建一个bitmap,然后反复在bimap上绘制,双缓冲在绘制时去绘制bitmap,这样我不改变内容的情况下绘制速度有所大幅提高,但是遇到一个问题是每次改变图片,我在bitmap上绘制内容时内存都会大幅度增加,
GdiplusStartup和Gdiplus::GdiplusShutdown(m_ulGdiplusToken)这个东西都在app类中,而且在我绘制的view类中也没法使用,因为bitmap是类成员,反复删除和不用是同一个效果。
如下代码:btone是在窗口大小变化或者初始化时new出来的。我现在是反复在其上面绘制,但内存增加,求各位看看,如何释放,谢谢。
Graphics *g=Graphics::FromImage(btone);
g->SetInterpolationMode(InterpolationModeNearestNeighbor);
int iheight=images[m_selectedpicindex]->GetHeight();
int iwidth=images[m_selectedpicindex]->GetWidth();
int x=(int)(m_leftx+pkss[m_selectedpicindex].position.x*m_picsacle);
int y=(int)(m_lefty+pkss[m_selectedpicindex].position.y*m_picsacle);
if(m_isfound3d&&first)
{
m_leftx=windowcr.Width()/2-pkss[m_selectedpicindex].position.x*m_picsacle;
m_lefty=windowcr.Height()/2-pkss[m_selectedpicindex].position.y*m_picsacle;
x=windowcr.Width()/2;
y=windowcr.Height()/2;
first=0;
}
g->DrawImage(images[m_selectedpicindex],Rect(m_leftx,m_lefty,iwidth*m_picsacle,iheight*m_picsacle));
g->DrawLine(rp3,x-15,y,x+15,y);
g->DrawLine(rp3,x,y-15,x,y+15);
g->DrawArc(rp4,Rect(x-20,y-20,40,40),0,360);
delete g; 展开
GdiplusStartup和Gdiplus::GdiplusShutdown(m_ulGdiplusToken)这个东西都在app类中,而且在我绘制的view类中也没法使用,因为bitmap是类成员,反复删除和不用是同一个效果。
如下代码:btone是在窗口大小变化或者初始化时new出来的。我现在是反复在其上面绘制,但内存增加,求各位看看,如何释放,谢谢。
Graphics *g=Graphics::FromImage(btone);
g->SetInterpolationMode(InterpolationModeNearestNeighbor);
int iheight=images[m_selectedpicindex]->GetHeight();
int iwidth=images[m_selectedpicindex]->GetWidth();
int x=(int)(m_leftx+pkss[m_selectedpicindex].position.x*m_picsacle);
int y=(int)(m_lefty+pkss[m_selectedpicindex].position.y*m_picsacle);
if(m_isfound3d&&first)
{
m_leftx=windowcr.Width()/2-pkss[m_selectedpicindex].position.x*m_picsacle;
m_lefty=windowcr.Height()/2-pkss[m_selectedpicindex].position.y*m_picsacle;
x=windowcr.Width()/2;
y=windowcr.Height()/2;
first=0;
}
g->DrawImage(images[m_selectedpicindex],Rect(m_leftx,m_lefty,iwidth*m_picsacle,iheight*m_picsacle));
g->DrawLine(rp3,x-15,y,x+15,y);
g->DrawLine(rp3,x,y-15,x,y+15);
g->DrawArc(rp4,Rect(x-20,y-20,40,40),0,360);
delete g; 展开
展开全部
这个是我用GDI+写的双缓冲例子,可以提供点参考,附带免费源码工程:
http://blog.csdn.net/renstarone/article/details/9089835
http://blog.csdn.net/renstarone/article/details/9089835
追问
这也是一种方法,不过我做的时候绘制并没有在view中进行,而是实现了一个绘制接口,cbitmap好像和设备有关。好在问题还是解决了,我用了双缓冲嵌套双缓冲,内存并没有持续增长,释放image之后就好了,
追答
OK,问题解决就好!~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询