public RectangleF GetBounds() { lock (SyncRoot) { using (SystemLayer.NullGraphics nullGraphics = new SystemLayer.NullGraphics()) { return(gdiRegion.GetBounds(nullGraphics.Graphics)); } } }
/// <summary> /// Retrieves an array of rectangles that approximates a region, and computes the /// pixel area of it. This method is necessary to work around some bugs in .NET /// and to increase performance for the way in which we typically use this data. /// </summary> /// <param name="region">The Region to retrieve data from.</param> /// <param name="scans">An array of Rectangle to put the scans into.</param> /// <param name="area">An integer to write the computed area of the region into.</param> /// <remarks> /// Note to implementors: Simple implementations may simple call region.GetRegionScans() /// and process the data for the 'out' variables.</remarks> public static void GetRegionScans(Region region, out Rectangle[] scans, out int area) { using (NullGraphics nullGraphics = new NullGraphics()) { IntPtr hRgn = IntPtr.Zero; try { hRgn = region.GetHrgn(nullGraphics.Graphics); GetRegionScans(hRgn, out scans, out area); } finally { if (hRgn != IntPtr.Zero) { SafeNativeMethods.DeleteObject(hRgn); hRgn = IntPtr.Zero; } } } GC.KeepAlive(region); }
public RectangleF GetBounds() { lock (SyncRoot) { using (SystemLayer.NullGraphics nullGraphics = new SystemLayer.NullGraphics()) { return gdiRegion.GetBounds(nullGraphics.Graphics); } } }