关于GDI+使用双缓存显示图片

在一个基于单文档的程序中使用GDI+显示图片,比如jpg图片,为了使窗口大小改变时图片不产生闪烁现象,需要使用双缓存处理。我是这样写的,在view类里面定义了两个成员变量... 在一个基于单文档的程序中使用GDI+显示图片,比如jpg图片,为了使窗口大小改变时图片不产生闪烁现象,需要使用双缓存处理。我是这样写的,在view 类里面定义了两个成员变量Graphics *memgraph 和 Bitmap *membmp;在文件打开响应函数里面相关代码如下:

CFileDialog openfile(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,L"bmp,jpg|*.bmp;*.jpg| All Support File|*.bmp;*.jpg;*.png|");
if(openfile.DoModal()==IDOK)
{
strpath=openfile.GetPathName();
Bitmap *image=Bitmap::FromFile(strpath);
membmp=new Bitmap(image->GetWidth(),image->GetHeight());
memgraph=Graphics::FromImage(membmp);
TextureBrush brush(image);
memgraph->FillRectangle(&brush,0,0,image->GetWidth(),image->GetHeight());
}

在OnDraw()里面的相关代码为:
if(!strpath.IsEmpty())
{
CDC *pDC=GetDC();
Graphics graph(pDC->GetSafeHdc());
CRect winrect;
GetClientRect(winrect); graph.DrawImage(membmp,0,0,winrect.Width(),winrect.Height());
ReleaseDC(pDC);
}
这样还是有闪烁,我刚接触GDI+处理图像,请大家帮忙告诉一下GDI+中的防止闪烁现象应该怎么做呢.... 谢谢了^_^
展开
 我来答
L_o_o_n_i_e
2010-05-03 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5229万
展开全部
双缓存应当在 背景缓存 里 绘图,绘完,一次copy到前景。
OnDraw() 里要有 ..BitBlt(...SRCCOPY)

有关函数:
1)、为屏幕DC 创建兼容的内存 DC:CreateCompatibleDC()
if(!m_dcMemory.CreateCompatibleDC(NULL)) // CDC m_dcMemory;
{
::PostQuitMessage(0);
}

2)、创建位图:CreateCompatibleBitmap()
m_Bmp.CreateCompatibleBitmap(&m_dcMemory, rt.Width(), rt.Height()); // CBitmap m_Bmp;

3)、把位图选入设备环境:SelectObject(),可以理解为选择画布
::SelectObject(m_dcMemory.GetSafeHdc(), m_Bmp);

4)、把绘制好的图形“拷贝“到屏幕上:BitBlt(...SRCCOPY)
pdcView->BitBlt(0, 0, rt.Width(), rt.Height(), &m_dcMemory, 0, 0, SRCCOPY);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式