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 (黑色) 请问有人知道是哪里出错了吗?

解决方案 »

  1.   

    CurrentColor := ACanvas.Pixels[ScrX[i],ScrY[k]];
    >>
    好像多了一个A...
    CurrentColor := Canvas.Pixels[ScrX[i],ScrY[k]];
    是这样吧..
    #FFFFFFFF这是白色啊
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    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;