Mega Code Archive

 
Categories / Delphi / API
 

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;