望请指教,万分感谢!!!注:不要用copyrect,这东东只能放大还勉强可用,但缩小就乱成一团了!

解决方案 »

  1.   

    image1.AutoSize:=true;
    然后将Image的Width,Height 同步放大、缩小相同的倍率,然后,image1.Stretch:=true;
    不就OK了吗
      

  2.   

    bitblt  //api函数。或stretch:=true.
      

  3.   

    stretch:=true.严重有问题。如果定义了一张图片的stretch:=true,然后再修改图片的大小,将会占用非常大且不可free掉的内存。可以测试,在window2000下,运行上述程式后,如果批一次启动时占了2MB的内存,那么连续更改图片大小几次或几十次后,那么所占用的内存将会达到10MB或数十MB了。stretch也是一个不可取的办法啊!
      

  4.   

    stretchblt扩大时很好,但缩小时会失真很严重。
      

  5.   

    image.proportional:=true
    or
    image.height:=image.picture.height;
    image.width:=(image.picture.width div image.picture.height)*image.picture.height
      

  6.   

    不知道怎么处理,只知道图片放大和缩小都要失真的,不过photoshop在这方面做得还不错,问问那些专家可能知道怎么处理,呵呵。
      

  7.   

    使用方法:
    BmpFile1 :要缩放的原始图文件名
    BmpFile2 :缩放并存盘的文件名
    w2: 缩放后的图像宽度
    h2: 缩放后的图像高度procedure ResizeBMP(BmpFile1,BmpFile2:String;w2,h2:Integer);
    {作用:将位图BmpFIle1调整大小为w,h并存盘于BmpFile2中}
    var
     Bmp1,Bmp2 :TBitmap;
     w1,h1:Integer;
    begin
      Bmp1 :=TBitmap.Create;
      Bmp2 :=TBitmap.Create;  Bmp1.LoadFromFile(BmpFile1);  w1:=Bmp1.Width;
      h1:=Bmp1.Height;
      
     Bmp2.Width :=w1*w2 div w1;
     Bmp2.Height :=h1*h2 div h1; SetStretchBltMode(Bmp2.Canvas.Handle,HalfTone);
     StretchBlt(Bmp2.Canvas.Handle,0,0,w2,h2,
                Bmp1.Canvas.Handle,0,0,w1,h1,SRCCOPY);
     Bmp2.SaveToFile(BmpFile2);
     Bmp1.Free;
     Bmp2.Free;
    end;范例:
    ...
    //把照片缩放到100*200大小
    ResizeBmp('c:\photo.bmp','c:\aaa.bmp',100,200);
    //显示缩放后的照片
    Image1.Pictue.Bitmap.LoadFromFile('c:\aaa.bmp');
    ...