我的意图是 将image1图像的奇数行的偶数点 复制到image2看看这段代码,为什么不行?
提议 可先屏蔽“if i mod 2=1 then”和“if j mod 2=0 then”
procedure TForm1.Button1Click(Sender: TObject);
var
bmp:Tbitmap;
pArray:PByteArray;
i,j,RGBvalue:integer;
Rvalue,Gvalue,Bvalue:Byte;
begin
    bmp:=Tbitmap.Create;
    bmp.Width:=image1.Width;
    bmp.Height:=image1.Height;
    for i:=0 to image1.Height-1 do
        if i mod 2=1 then
        begin
            pArray:=image1.Picture.Bitmap.ScanLine[i];
            for j:=0 to image1.Width-1 do
                if j mod 2=0 then
                begin
                    RGBvalue:=pArray[j];
                    Rvalue:=GetRvalue(RGBvalue);
                    Gvalue:=GetGvalue(RGBvalue);
                    Bvalue:=GetBvalue(RGBvalue);
                    bmp.Canvas.Pixels[j,i]:=RGB(Rvalue,Gvalue,Bvalue);
                end;
        end;    image2.Picture.Bitmap.Assign(bmp);
end;

解决方案 »

  1.   

    为什么用rgb转换?
    procedure TForm1.Button1Click(Sender: TObject);
    var
      bmp:Tbitmap;
      i,j:integer;
    begin
        bmp:=Tbitmap.Create;
        bmp.Width:=image1.Width;
        bmp.Height:=image1.Height;
        for i:=0 to image1.Height-1 do
          if i mod 2=1 then begin
              for j:=0 to image1.Width-1 do
                  if j mod 2=0 then
                      bmp.Canvas.Pixels[j,i]:=Image1.Canvas.Pixels[j,i];
          end;
        image2.Picture.Bitmap.Assign(bmp);
    end;