bmp.scanline和getpixel获取的颜色为什么会不同呢?

xionw 2008-07-10 09:52:20

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;

上述代码中为什么获取的结果是不一样的呢?还是说这两种方法本身获取的颜色就不一样?
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿发伯 2008-07-10
  • 打赏
  • 举报
回复
不知道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;
Corn1 2008-07-10
  • 打赏
  • 举报
回复
我试过了,三个是一样的。不知道楼主是怎么试的。
阿发伯 2008-07-10
  • 打赏
  • 举报
回复
我测试代码,颜色值是一样的。
阿发伯 2008-07-10
  • 打赏
  • 举报
回复
copys函数Delphi7中好像没有?是第三方提供的?不过,你这个问题与Copys无关,可能你自己测试时误判断了而已。
xionw 2008-07-10
  • 打赏
  • 举报
回复
copys(0,420,393,bmp.Width,bmp.Height,bmp);
0  screen句柄
420,393  矩形左上角坐标
width,height 宽和高
bmp 矩形内容赋值bmp ..难道这儿需要用var bmp?
xionw 2008-07-10
  • 打赏
  • 举报
回复
copys 复制屏幕矩形区域
jacknes009 2008-07-10
  • 打赏
  • 举报
回复
我试过了,三个是一样的。不知道楼主是怎么试的。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧