- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >


Frequently Asked Questions

PtInRegion pixel function

Question:

I am having trouble getting the Windows API function PtInRegion() to work correctly in Windows 3.1 and Windows 95 without generating an application error or GPF. What can I do to determine if a point is in a region reliably?

Answer:

The Windows 3.1 and Windows 95 GDI heap is limited in regards 

to scan converting large and complex regions such as Ellipses, 

Polygons, and PolyPolygons. One "Brute Force" technique is to 

create an "in memory" monochrome bitmap and draw the 

required shape in black. You can then test to see if a given point in 

the bitmap is black or white. If the test pixel is black, then the given 

point is "in" the given region.



Example:



procedure TForm1.Button1Click(Sender: TObject);

var

  bm : TBitmap;

begin

  bm := TBitmap.Create;

  bm.Monochrome := true;

  bm.Height := 100;

  bm.Width := 100;

  bm.Canvas.Brush.Color := clWhite;

  bm.Canvas.FillRect(Rect(0, 0, 100, 100));

  bm.Canvas.Brush.Color := clBlack;

  bm.Canvas.Pen.Color := clBlack;

  bm.Canvas.Ellipse(10, 10, 90, 90);

  if bm.Canvas.Pixels[20, 20] = clBlack then

    ShowMessage('Point : (20, 20) is in region') else

    ShowMessage('Point : (20, 20) is not in region');

  if bm.Canvas.Pixels[50, 50] = clBlack then

    ShowMessage('Point : (50, 50) is in region') else

    ShowMessage('Point : (50, 50) is not in region');

  bm.Free;

end;




* #WhiteUnicorn/ StartPage/ Documentation/DelphiFAQ >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile