我用Stretchblt方法把一张320*240的BMP图片放大到800*600用了>100毫秒的时间,大家有没有好的算法把这个缩放的时间控制在<15毫秒以上呀?(我的本本是CPU1.2,内存是256)

解决方案 »

  1.   

    var
      i: integer;
      bmp1, bmp2: tbitmap;
    begin
      bmp1 := tbitmap.Create;
      bmp2 := tbitmap.Create;
      bmp1.LoadFromFile('d:\1.bmp'); //320 X 240 24位
      bmp2.Width := 800;
      bmp2.Height := 600;  i := gettickcount;
      bmp2.Canvas.StretchDraw(bmp2.Canvas.ClipRect, bmp1);
      showmessage(inttostr(gettickcount-i));  bmp2.SaveToFile('d:\2.bmp');
      bmp1.Free;
      bmp2.Free;
    end;不慢啊,基本上显示0,偶尔显示10,看看TBitmap的Draw方法吧,可能有帮助
      

  2.   

    设置 Bitmap的PixelFormat为pf24bit看看。或者直接调用API很快啊。我机器比较慢,但直接调用StretchBlt函数很快的。基本上感觉不到:
    Bmp2.LoadFromFile('C:\Test.bmp');Bmp1.Width:= 100;
    Bmp1.Height:= 80;StretchBlt(Bmp1.Canvas.Handle, 0, 0, 100, 80,
               Bmp2.Canvas.Handle, 0, 0, Bmp2.Width, Bmp2.Heihgt, SRCCOPY);Bmp2.SaveToFile('d:\Test.bmp');
      

  3.   

    StretchDraw 方法就是StretchBlt的封装!
      

  4.   

    DrawDib视频函数直接对显存操作,速度快
      

  5.   

    这应该是API啊,再快肯定是更好的算法了.
      

  6.   

    去盒子下 FastLib 控件,里面有更快的放縮方法
      

  7.   

    去下个FastLib控件 看看 。。