图片双缓冲

在窗口显示图片的时候, 有时候会出现卡顿, 为了让图片更换显示的更为流畅,  我们用一种缓冲的方式来显示 下面是Delphi代码:

 

声明一个 FBmp: TBitmap 变量

窗口初始化的时候

FBmp := TBitmap.Create;

FBmp.SetSize(Image1.Width, Image1.Height);

在定时器中开始绘画 主窗口中有3个 image控件

先画背景图片 image1

  FBmp.Canvas.Draw(0, 0, Image1.Picture.Graphic);


  if Self.Tag = 0 then
   begin
     FBmp.Canvas.Draw(67, 291, Image2.Picture.Graphic);
 //    FBmp.Canvas.Draw(0, 200, Image1.Picture.Graphic);
 //    FBmp.Canvas.TextOut(10, 40, '鹅鹅鹅鹅鹅鹅饿鹅鹅');
  end
  else
  begin
        FBmp.Canvas.Draw(67, 291, Image3.Picture.Graphic);
//    FBmp.Canvas.TextOut(10, 40, '啊啊啊啊啊啊啊啊啊');
  end;


  Self.Canvas.Draw(0, 0, FBmp);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缓冲技术可以有效地提高绘图的效率和质量,尤其是在需要频繁更新图像或实现动画效果的情况下。下面介绍一下在 VC++ 中如何使用双缓冲技术绘制图片。 1. 创建位图对象 首先,我们需要创建一个位图对象,用于存储要绘制的图片。可以使用 LoadImage 函数从文件中加载一个位图,也可以使用 CreateBitmap 函数创建一个空的位图对象,然后使用 SetPixel 或者 BitBlt 等函数将图像数据写入到位图中。 2. 创建内存 DC 接下来,我们需要创建一个内存 DC(Device Context)对象,用于在内存中绘制图像。可以使用 CreateCompatibleDC 函数创建一个与屏幕兼容的内存 DC 对象。 3. 将位图对象选入内存 DC 将创建的位图对象选入内存 DC 中,以便在内存中进行绘制操作。可以使用 SelectObject 函数将位图对象选入内存 DC。 4. 绘制图像 在内存 DC 中使用 GDI 函数绘制图像,例如使用 DrawImage 或者 BitBlt 函数将图像从源 DC 复制到内存 DC 中。 5. 将内存 DC 中的图像绘制到屏幕 最后,使用 BitBlt 函数将内存 DC 中的图像绘制到屏幕上,将内存中的图像复制到屏幕 DC 中。 下面是一个简单的示例代码: ``` // 加载位图 HBITMAP hBitmap = LoadImage(NULL, _T("test.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); // 创建内存 DC HDC hMemDC = CreateCompatibleDC(NULL); // 将位图选入内存 DC HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap); // 在内存 DC 中绘制图像 // ... // 将内存 DC 中的图像绘制到屏幕上 HDC hDC = GetDC(hWnd); BitBlt(hDC, 0, 0, cx, cy, hMemDC, 0, 0, SRCCOPY); ReleaseDC(hWnd, hDC); // 释放资源 SelectObject(hMemDC, hOldBitmap); DeleteDC(hMemDC); DeleteObject(hBitmap); ``` 其中,hWnd 是窗口的句柄,cx 和 cy 分别是窗口的宽度和高度。需要注意的是,如果使用了双缓冲技术,就不要直接在窗口 DC 上绘制图像,而是应该在内存 DC 中进行操作,最后再将图像绘制到屏幕上。这样可以避免闪烁和卡顿等问题,提高绘图的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值