我的image控件里有图片,使用timer控件进行移动,为了平滑,每次移动1个像素,interval都设为1了还是很慢,如果每次多移动几个像素,那就显得闪烁,如果达到即平滑又快速的移动效果?

解决方案 »

  1.   

    利用内存dc或者image的属性stretch:=true
      

  2.   

    不好意思,后面半句错了,应该是doublexxxx:=true.查一下
      

  3.   

    我知道那句,但是只是对在image上画图像用,我是移动图片,也不是拉伸,还有没有什么好办法了?
      

  4.   

    Form1.DoubleBuffered :=true;
      

  5.   

    1 interval为1 是ms,有必要么?用25每次移动25就可以了阿
    2 利用DoubleBuffered 或者内存dc bitblt的效率比自己直接paint都高,应该在2-3ms以内
      

  6.   

    不好意思,有一点理解错,我的意思是你用内存dc里的image直接bitblt到form的dc上
      

  7.   

    用bitblt移动图片快么?而且还要看上去很平滑,不是跳动的那样,可否给句代码?满意后马上给分
      

  8.   

    可以使用双缓冲技术来解决,http://www.delphibbs.com/上面有相关的文章。
      

  9.   

    我试过 Form1.DoubleBuffered:=True; 非常好,谢你楼主的这个问题,让我又学到新东西
      

  10.   

    听说把Image控件放到Panel控件里再移动,闪烁问题会轻一点,你试试行吗??
      

  11.   

    Form1.DoubleBuffered :=true;
    没问题的
      

  12.   

    使用  Form1.DoubleBuffered :=true;
    仍旧会闪烁!
      

  13.   

    就像firetoucher(风焱) 说的,不要用Image,自己绘,很简单的嘛,就一行代码搞定。
    至于interval,假设改变Image位置的代码本身需要执行100毫秒,你设置为1又有什么用呢。var X, Y:Integer;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    Inc(X);
    Canvas.Draw(X, Y, Bitmap1);
    end;procedure TForm1.FormPaint(Sender: TObject);
    begin
    Canvas.Draw(X, Y, Bitmap1);
    end;
      

  14.   

    多放一个PaintBox 用PaintBox.Canvas.CopyRect(PaintBox.Canvas.ClipRect,Image.Picture.Bitmap.Canvas,Rect());
    Image.Visible:=False;
      

  15.   

    firetoucher(风焱) 
    说的极有道理,直接画到form上,你的图片之所以闪烁是因为form需要刷新的缘故。