procedure TForm1.btn1Click(Sender: TObject);
var
bmp:TBitmap;
i:integer;
k:TColor;
r,g,b:Byte;
p1:PByteArray;
p2:pRGBTripleArray;  
begin
 bmp:=TBitmap.Create;
 bmp.Width:=10;
 bmp.Height:=1;
 bmp.PixelFormat:=pf24bit;
 copys(0,420,393,bmp.Width,bmp.Height,bmp);
 p1:=bmp.ScanLine[0];
 p2:=bmp.ScanLine[0];
 for i := 0 to bmp.Width-1 do
   begin
   k:=bmp.Canvas.Pixels[i,0];
   r:=GetRValue(k);
   g:=GetgValue(k);
   b:=GetbValue(k);
   mmo1.Lines.Add('GETPIXEL: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
   r:=p1[i*3+2];
   g:=p1[i*3+1];
   b:=p1[i*3];
   mmo1.Lines.Add('BYTEARRY: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
   r:=p2[i].rgbtRed;
   g:=p2[i].rgbtGreen;
   b:=p2[i].rgbtBlue;
   mmo1.Lines.Add('RIPLE: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
   end;
  FreeAndNil(bmp);
end;上述代码中为什么获取的结果是不一样的呢?还是说这两种方法本身获取的颜色就不一样?

解决方案 »

  1.   

    不知道Copys是个什么函数,改了一下,对任意点赋值,然后读出来,结果都是一样。var
    bmp:TBitmap;
    i:integer;
    k:TColor;
    r,g,b:Byte;
    p1:PByteArray;
    p2:PRGBTriple;
    begin
     bmp:=TBitmap.Create;
     bmp.Width:=10;
     bmp.Height:=1;
     bmp.PixelFormat:=pf24bit;
     i := 1;           // 改变i(0- 9),测试任意一个点
     bmp.Canvas.Pixels[i,0] := clRed;
    // copys(0,420,393,bmp.Width,bmp.Height,bmp);
     p1:=bmp.ScanLine[0];
     p2:=bmp.ScanLine[0];
     Inc(p2, i);
    // for i := 0 to bmp.Width-1 do
    //   begin
       k:=bmp.Canvas.Pixels[i,0];
       r:=GetRValue(k);
       g:=GetgValue(k);
       b:=GetbValue(k);
       memo1.Lines.Add('GETPIXEL: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
       r:=p1[i*3+2];
       g:=p1[i*3+1];
       b:=p1[i*3];
       memo1.Lines.Add('BYTEARRY: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
       r:=p2^.rgbtRed;
       g:=p2^.rgbtGreen;
       b:=p2^.rgbtBlue;
       memo1.Lines.Add('RIPLE: '+inttostr(r)+' '+inttostr(g)+' '+inttostr(b));
    //  end;
      FreeAndNil(bmp);
    end;
      

  2.   

    copys(0,420,393,bmp.Width,bmp.Height,bmp);
    0  screen句柄
    420,393  矩形左上角坐标
    width,height 宽和高
    bmp  矩形内容赋值bmp ..难道这儿需要用var bmp?
      

  3.   

    copys函数Delphi7中好像没有?是第三方提供的?不过,你这个问题与Copys无关,可能你自己测试时误判断了而已。