虽然我的方法有点笨,但是总算可以完成了。大家如果有其他方法,敬请赐教。procedure TForm1.Button1Click(Sender: TObject);
var
  Rect : TRect;
  Image1,Image2 : TImage;
begin
  Image1 := TImage.Create(Form1);
  Image2 := TImage.Create(Form1);
  if OpenDialog1.Execute then
    Image1.Picture.LoadFromFile(OpenDialog1.FileName);  Image1.Width := 864;
  Image1.Height := 600;
  Image1.Stretch := True;  Image2.Width := 864;
  Image2.Height := Image1.Height;
  Rect.Left := Image2.Left;
  Rect.Top := Image2.Top;
  Rect.Right := Image2.Left + Image2.Width;
  Rect.Bottom := Image2.Top + + Image2.Height;
  Image2.Canvas.StretchDraw(Rect,Image1.Picture.Graphic);
  if SaveDialog1.Execute then
    Image2.Picture.SaveToFile(SaveDialog1.FileName);
  Image1.Free;
  Image2.Free;
end;

解决方案 »

  1.   

    楼上的回答有问题,图象有可能不能全切procedure TForm1.Button1Click(Sender: TObject);
    var
      Image1,Image2: TImage;
    begin
      Image1 := TImage.Create(self);  try
         Image2 := TImage.Create(self);
         try
            if OpenDialog1.Execute then
            begin
                 Image1.Picture.LoadFromFile(OpenDialog1.FileName);
                 Image2.width:=864;
                 Image2.Height :=Trunc(864*Image1.Picture.Height/Image1.Picture.Width);
                 Image2.Canvas.StretchDraw(Rect(0,0,864,Trunc(864*Image1.Picture.Height/Image1.Picture.Width)),Image1.Picture.Bitmap );//用Bitmap 而非Graphic
            end;
            if SaveDialog1.Execute then
                 Image2.Picture.SaveToFile(SaveDialog1.FileName);
         finally
         Image2.Free;
         end;
      finally
      Image1.Free;
      end;
    end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    b1,b2:Tbitmap;
    begin
    b1:=tbitmap.Create;
    b2:=tbitmap.Create;
    b2.LoadFromFile('g:\111.bmp');b1.Width:=864;
    b1.Height:=600;StretchBlt(b1.canvas.Handle,0,0,b1.Width,b1.Height,b2.Canvas.Handle,0,0,b2.Width,b2.Height,SRCCOPY );
    b1.SaveToFile('g:\222.bmp');
    b2.FreeImage;
    b1.FreeImage;
    b2.free;
    b1.free;
    end;
      

  3.   

    谢谢;楼上几位;更高要求;把非单色 的bmp 转为 单色的
      

  4.   

    delphi自带的一个demo中,imageview里有缩放的例子,看一下吧
      

  5.   

    此话怎讲?
    单色是什么意思?
    你是指灰度图象吗?
    gray := (r + g + b) div 3;
    或 gray := round(r*0.5 + g *0.3 + b * 0.2)(系数记得不太清,还请查查书);
    r,g,b分别指三个分量上的灰度直.
    还要注意越界!
      

  6.   

    var 
      bmp1,bmp2: TBitmap; 
    begin 
      bmp1:=TBitmap.Create; 
      bmp2:=TBitmap.Create; 
      try 
        bmp1.loadfromfile('c:\1.bmp'); //  
        bmp2.width:=200;                  //   
        bmp2.height:=300;                 // 以上可以改为你需要的尺寸 
        bmp2.canvas.stretchdraw(rect(0,0,bmp2.width,bmp2.height),bmp1); 
        bmp2.savetofile('c:\2.bmp'); 
      finally 
        bmp1.Free; 
        bmp2.Free; 
      end;
      

  7.   

    Gray := 0.3*R + 0.59*G + 0.11*B
      

  8.   

    单色就是黑白的;没有灰度;比如 orc的图像