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;
展开
 我来答
任明星Ming
2014-01-08 · TA获得超过798个赞
知道小有建树答主
回答量:1061
采纳率:100%
帮助的人:1151万
展开全部
这个是我用GDI+写的双缓冲例子,可以提供点参考,附带免费源码工程:
http://blog.csdn.net/renstarone/article/details/9089835
追问
这也是一种方法,不过我做的时候绘制并没有在view中进行,而是实现了一个绘制接口,cbitmap好像和设备有关。好在问题还是解决了,我用了双缓冲嵌套双缓冲,内存并没有持续增长,释放image之后就好了,
追答
OK,问题解决就好!~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式