procedure TForm1.Button1Click(Sender: TObject);
const
Digits : array[0..$F] of Char = '0123456789ABCDEF';
var
CurrentColor: TColor;//当前颜色值
ScrX: Array[0..100] of Integer;//屏幕上X坐标
ScrY: Array[0..100] of Integer;//屏幕上Y坐标
ColorStory: Array[0..31855] of Integer;//存储截图内所有象素的颜色值
i,k,m,n:Integer;
rr,gg,bb: byte;
begin
for i := Low(ScrX) to High(ScrX) do//X坐标数组赋值
ScrX[i] := i;
for i := Low(ScrY) to High(ScrY) do//Y坐标数组赋值
ScrY[i] := i;
k := 0;
for i := Low(ScrX) to High(ScrX) do
for k := Low(ScrY) to High(ScrY) do
begin
CurrentColor := ACanvas.Pixels[ScrX[i],ScrY[k]];
rr := getRvalue(CurrentColor); {分解红色分量}
gg := getGvalue(CurrentColor); {分解绿色分量}
bb := getBvalue(CurrentColor); {分解蓝色分量}
ShowMessage('#' + Digits[rr shr 4] + Digits[rr and $F] + Digits[gg shr 4] + Digits[gg and $F] + Digits[bb shr 4] + Digits[bb and $F]);
end;
end;这段代码的功能是 截取屏幕左上角 100 × 100 范围内所有象素的值,并显示出来
运行结果很奇怪,值全是 #FFFFFFFF (黑色) 请问有人知道是哪里出错了吗?
const
Digits : array[0..$F] of Char = '0123456789ABCDEF';
var
CurrentColor: TColor;//当前颜色值
ScrX: Array[0..100] of Integer;//屏幕上X坐标
ScrY: Array[0..100] of Integer;//屏幕上Y坐标
ColorStory: Array[0..31855] of Integer;//存储截图内所有象素的颜色值
i,k,m,n:Integer;
rr,gg,bb: byte;
begin
for i := Low(ScrX) to High(ScrX) do//X坐标数组赋值
ScrX[i] := i;
for i := Low(ScrY) to High(ScrY) do//Y坐标数组赋值
ScrY[i] := i;
k := 0;
for i := Low(ScrX) to High(ScrX) do
for k := Low(ScrY) to High(ScrY) do
begin
CurrentColor := ACanvas.Pixels[ScrX[i],ScrY[k]];
rr := getRvalue(CurrentColor); {分解红色分量}
gg := getGvalue(CurrentColor); {分解绿色分量}
bb := getBvalue(CurrentColor); {分解蓝色分量}
ShowMessage('#' + Digits[rr shr 4] + Digits[rr and $F] + Digits[gg shr 4] + Digits[gg and $F] + Digits[bb shr 4] + Digits[bb and $F]);
end;
end;这段代码的功能是 截取屏幕左上角 100 × 100 范围内所有象素的值,并显示出来
运行结果很奇怪,值全是 #FFFFFFFF (黑色) 请问有人知道是哪里出错了吗?
>>
好像多了一个A...
CurrentColor := Canvas.Pixels[ScrX[i],ScrY[k]];
是这样吧..
#FFFFFFFF这是白色啊
const
Digits : array[0..$F] of Char = '0123456789ABCDEF';
var
CurrentColor: TColor;//当前颜色值
i,k,m,n:Integer;
rr,gg,bb: byte;
ACanvas: TCanvas;
begin
ACanvas := TCanvas.Create();
ACanvas.Handle := GetDC(0);
try
for i := 0 to 100 do
for k := 0 to 100 do
begin
CurrentColor := ACanvas.Pixels[i,k];
// rr := getRvalue(CurrentColor); {分解红色分量}
// gg := getGvalue(CurrentColor); {分解绿色分量}
// bb := getBvalue(CurrentColor); {分解蓝色分量}
ShowMessage('#' + IntToHex(CurrentColor, 6));
end;
finally
ReleaseDC(0, ACanvas.Handle);
end;
end;