我想问下大家,在delphi中,如何得到给定矩形,或者是圆形区域内的颜色值啊?

解决方案 »

  1.   

    Color: TColor;Color := Canvas.Pixels[x, y];
      

  2.   

    我是这样想的,通过扫描仪,把要填写的表格扫描出来,然后检测需要填写的地方的颜色值,如果是空的话,应该就是白色的(这个到时候可以调),关键就是怎么知道一个矩形区域内的颜色值总和?
    我开始也想过用Canvas.Pixels[x, y];
    两个FOR应该就可以了,我是想看看大家还有没有什么更好的办法
      

  3.   

    Canvas.Pixels[x, y]速度很慢的,也可以将Canvas.Handle转换为TBitmap,然后直接处理扫描线
      

  4.   

    function GetClipBitmapFromDC(DC: HDC; x, y, Width,
      Height: Integer): HBITMAP;
    var
      memDC: HDC;
      oldBmp: HBITMAP;
    begin
      Result := CreateCompatibleBitmap(DC, Width, Height);
      memDC := CreateCompatibleDC(DC);
      oldBmp := SelectObject(memDC, Result);
      try
        BitBlt(memDC, 0, 0, Width, Height, DC, x, y, SRCCOPY);
      finally
        SelectObject(memDC, oldBmp);
        DeleteDC(memDC);
      end;
    end;var
      bmp: TBitmap;
    begin
      bmp := TBitmap.Create;
      // x,y,Width,Heught是给定矩形尺寸
      bmp.Handle := GetClipBitmapFromDC(Canvas.Handle, x, y, width, height);
      bmp.PixelFormat := pf24bit;
      // 下面可以操作TBitmap的扫描线了
      ....
      bmp.Free;
    end;