我是在timer事件里实现的画图,每次画之前先清除上次的图像。但是闪动的厉害,据说先把图像画到内存在copy到paintbox上能解决,可是o是个初学者,所以请高手帮忙。谢谢。
最好举个例子阿,谢谢。

解决方案 »

  1.   

    画图之前先加一句
    self.Parent.DoubleBuffered:=True;
      

  2.   

    procedure TfmAdvanceSet.DrawGamaLine(Value: Real);
    const
      MAXINT = 255;
    var
      ix,iy: Integer;
      bmp: TBitmap;
    begin
      bmp := TBitmap.Create;
      try
          bmp.Width := Image1.Width;
          bmp.Height := Image1.Height;
          bmp.Canvas.Brush.Color := clBlack;
          bmp.Canvas.Pen.Color := clBlue;
          bmp.Canvas.Rectangle(0,0,bmp.Width,bmp.Height);
          bmp.Canvas.Pen.Color := clLime;
          bmp.Canvas.MoveTo(0,bmp.Height);
          for ix := 1 to MAXINT do
          begin
              iy :=  MAXINT - Trunc(Exp(ln(ix/MAXINT)* (1/Value))*MAXINT);
              bmp.Canvas.LineTo(ix,iy);
          end;
          Image1.Picture.Assign(bmp);
        finally
          bmp.Free;
        end;
    end;
      

  3.   

    最专业的就是DirectX或者OpenGL,只要你有空去看那些C++写的范例和厚厚的书(编程以及立体几何)。
      

  4.   

    以前说过原因了,你看一下
    http://community.csdn.net/Expert/topic/4226/4226032.xml?temp=.544491
    原因是delphi的doubleBouble每次画完一个图形就交换一次缓存,你连续画2个它就连续交换两次,当然闪。
    我现在用opengl,还要把gdi的缓存关掉,自己画,
      

  5.   

    delphi深度历险上面讲的很清楚.