现在假如有一张图像,设它的左上角坐标为(0,0),右下脚坐标为(450,600)。
现在需要把它任意平均切割(比如可切割成4份或者9份或者16份等)。
比如说将上面的图像切成9等份。它的坐标表示为
第一幅图像开始坐标(0,0)第一幅图像结束坐标 (150,200);
第二幅图像开始坐标(150,0第二幅图像结束坐标(300,200);
第三幅图像开始坐标(300,0)第三幅图像结束坐标(450,200);第四幅图像开始坐标(0,200)第四幅图像结束坐标(150,400);
第五幅图像开始坐标(150,200)第五幅图像结束坐标(300,400);
第六幅图像开始坐标(300,200)第六幅图像结束坐标(450,400);第七幅图像开始坐标(0,400)第七幅图像结束坐标(150,600);
第八幅图像开始坐标(150,400)第八幅图像结束坐标(300,600);
第九幅图像开始坐标(300,400)第九幅图像结束坐标(450,600);
这样就得到了切割后9幅图像的左上角坐标和右下脚坐标。
现在的问题是如何得到平分后的坐标值。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var a:array[0..30,0..30] of TPoint;
        LeftTop,RightBottom:array[1..900]of TPoint;
        PicWidth,PicHeight,i,j,k,n:integer;
    begin
      n:=3; PicWidth:=600;PicHeight:=450;
      a[0,0]:=Point(0,0);
      a[n,n]:=Point(PicWidth,PicHeight);  for i:=0 to n do
        for j:=0 to n do
           begin
             a[i,j].X:=j*(PicHeight div n);
             a[i,j].Y:=i*(PicWidth div n);
           end;    k:=0;
        for i:=0 to n-1 do
         for j:=0 to n-1 do
           begin
             k:=k+1;
             LeftTop[k]:=a[i,j];//第k幅图的左上角坐标
             RightBottom[k]:=a[i+1,j+1]; //第k幅图的右下角坐标
           end;  for k:=1 to n*n do
      Memo1.Lines.Add(IntToStr(k)+' ('+IntToStr(LeftTop[k].X)+','+IntToStr(LeftTop[k].Y)+') '+' ('+IntToStr(RightBottom[k].X)+','+IntToStr(RightBottom[k].Y)+') ');
    end;