图像抖动问题 ( 积分: 200 )

  • 主题发起人 主题发起人 yanggh
  • 开始时间 开始时间
Y

yanggh

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TBitmap对象和TCanvas组件在后台画图,Timage在前台显示,实现位图移动。但是图像抖动的厉害。采取了下列措施还是抖动.在线等待,急切盼望能得到各位大侠的帮助,送200分.
1.image1.parent.doublebuffered:=true;
2.拦截WMEraseBkgnd消息
procedure TForm1.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
Msg.Result :=1;
end;
 
我用TBitmap对象和TCanvas组件在后台画图,Timage在前台显示,实现位图移动。但是图像抖动的厉害。采取了下列措施还是抖动.在线等待,急切盼望能得到各位大侠的帮助,送200分.
1.image1.parent.doublebuffered:=true;
2.拦截WMEraseBkgnd消息
procedure TForm1.WMEraseBkgnd(var Msg: TWMEraseBkgnd);
begin
Msg.Result :=1;
end;
 
用以下几个函数就可以了,
我从我原来的代码抄下来的
var
hMemDC: HDC;

hMemDC := Windows.CreateCompatibleDC(Getdc(Form1.Handle));
bmpPage := TBitmap.Create;
bmpPage.Width := w;
bmpPage.Height := h;

hOld := windows.SelectObject(hMemDC,bmpPage.handle);
dc := GetWindowDC (Form1.Handle);

bitblt(dc,nCopyX ,nCopyY, Form1.Width, Form1.Height ,
hMemDC,nCopySrcX,nCopySrcY,SRCCOPY);
 
方法是 先把图像绘制到 Memdc 中,

在窗口的重中,将 memdc bitblt copy 到窗口 dc 中
 
to djh_djh:
你好。首先感谢你的帮助.
按照上述方法
在formshow事件中可以显示初始图像,在Timer1Timer事件中,图像却不能移动.
不知为何?
 
按照上述方法,图像移动后,依然抖动的厉害.
不知如何是好.急切盼望哪位大侠能帮忙解决这个问题!!!!
 
你在窗体的 OnShow 事件中,加上一句:
Self.DoubleBuffer := True;
保证你会把分给我的,~~OK
 
用Delphi7可以解决这个问题
 
不要在定时器中会制
不要用 控件
直接在窗口中绘制

你到 www.123365.com 下一个软件看一下,我的就是这样写的,不闪
 
在显示刷新图象的时候只刷新图象中变化的部分,没变化的地方就不刷新,这样可以很好的消除图象抖动的.
我曾经在编写的一个显示料位的控件中就是采用这个方法的.
 
多人接受答案了。
 
谢方的解决方案最绝,Thanks
 
后退
顶部