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;上述代码中为什么获取的结果是不一样的呢?还是说这两种方法本身获取的颜色就不一样?
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;
0 screen句柄
420,393 矩形左上角坐标
width,height 宽和高
bmp 矩形内容赋值bmp ..难道这儿需要用var bmp?