本人现用DELPHI设计一个程序,用来模拟红绿色片方法产生立体图的过程,制作红绿色片及叠加部分已经完成,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  inbitmap:Tbitmap;
  SrcRow:pRGBArray;
  i,j:integer;
begin
  if opendialog1.Execute then
  begin
    inbitmap:=Tbitmap.Create;
    inbitmap.LoadFromFile(opendialog1.FileName);
    for i := 0 to inbitmap.Height- 1 do
    begin
      SrcRow := inbitmap.ScanLine[i];
      for j := 0 to inbitmap.Width - 1 do
      begin
        SrcRow[j].rgbtRed:=255;
      end;
  end;  
  image1.AutoSize:=true;
  image1.Picture.Bitmap := inbitmap;
  end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
  inbitmap:Tbitmap;
  SrcRow:pRGBArray;
  i,j:integer;
begin
  if opendialog1.Execute then
  begin
    inbitmap:=Tbitmap.Create;
    inbitmap.LoadFromFile(opendialog1.FileName);
    for i := 0 to inbitmap.Height- 1 do
    begin
      SrcRow := inbitmap.ScanLine[i];
      for j := 0 to inbitmap.Width - 1 do
      begin
        SrcRow[j].rgbtGreen:=255;
        SrcRow[j].rgbtBlue:=255;
      end;
  end;
  image2.AutoSize:=true;
  image2.Picture.Bitmap := inbitmap;
  end;end;procedure TForm1.Button3Click(Sender: TObject);
begin
  image3.Picture.Bitmap:=image1.Picture.Bitmap;
  image3.Picture.Bitmap.Width:=image3.Picture.Bitmap.Width+20;
  image3.Picture.Bitmap.Height:=image3.Picture.Bitmap.Height+20;
  image3.AutoSize :=true;
  BitBlt(image3.Canvas.Handle,20,20,image2.Width,image2.Height,image2.Canvas.Handle,0,0,SRCAND);
end;
但是还有一个功能一直不得其解,因为我是新手,特来求教。就是建立4个button,分别控制image3内,image2相对于image1的上下左右的移动,并且可以设置每次移动的步长。望达人指教,谢谢。

解决方案 »

  1.   

    image.top  用来控制上下移动, image.left控制左右移动。。找个edit让用户输入,设置步长
      

  2.   

    这个方法我已经试用多次,但是这个程序中,image3里产生的图像是image2与image1叠合而成的,我使用您所述的方法一直无法实现该功能,不太明白这里两个代码应该怎么放置。
    请问能不能根据我的已有程序,具体讲述一下或者给出一段范例,image.Top和image.Left应该在何处使用?谢过
      

  3.   

    image3里产生的图像是image2与image1叠合而成的那就在叠合的时候设置一个变量,记录两个image要差多少,根据这个变量来叠合。
      

  4.   

    那么,是否可以仅通过对BitBlt(image3.Canvas.Handle,20,20,image2.Width,image2.Height,image2.Canvas.Handle,0,0,SRCAND);
    end;这句的修改实现移动?请详细点告知,谢谢