Jump to content
Xtreme .Net Talk

pandamonium99

Members
  • Posts

    1
  • Joined

  • Last visited

About pandamonium99

  • Birthday 05/07/1985

pandamonium99's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. Im trying to create a pixel search function, but i keep getting memory leaks and i cant figure out why. I fixed 1 put another popped up. Was wondering what im doing wrong. } public Bitmap capturescreen(Rectangle rect) { Size sz = Screen.PrimaryScreen.Bounds.Size; IntPtr hDesk = GetDesktopWindow(); IntPtr hSrce = GetWindowDC(hDesk); IntPtr hDest = CreateCompatibleDC(hSrce); IntPtr hBmp = CreateCompatibleBitmap(hSrce, sz.Width, sz.Height); IntPtr hOldBmp = SelectObject(hDest, hBmp); bool b = BitBlt(hDest, 0, 0, rect.Width, rect.Height, hSrce, 0, 0, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt); Bitmap bmp = Bitmap.FromHbitmap(hBmp); // <-------- Says out of memory on this line. SelectObject(hDest, hOldBmp); DeleteObject(hBmp); DeleteDC(hDest); ReleaseDC(hDesk, hSrce); return bmp; } } } Here is the pixel search function which uses the function above public Point PixelSearch(Rectangle rect, int PixelColor, int Shade_Variation) { Color Pixel_Color = Color.FromArgb(PixelColor); Point Pixel_Coords = new Point(-1, -1); Bitmap RegionIn_Bitmap = capturescreen(rect); BitmapData RegionIn_BitmapData = RegionIn_Bitmap.LockBits(new Rectangle(0, 0, RegionIn_Bitmap.Width, RegionIn_Bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int[] Formatted_Color = new int[3] { Pixel_Color.B, Pixel_Color.G, Pixel_Color.R }; //bgr unsafe { for (int y = 0; y < RegionIn_BitmapData.Height; y++) { byte* row = (byte*)RegionIn_BitmapData.Scan0 + (y * RegionIn_BitmapData.Stride); for (int x = 0; x < RegionIn_BitmapData.Width; x++) { if (row[x * 3] >= (Formatted_Color[0] - Shade_Variation) & row[x * 3] <= (Formatted_Color[0] + Shade_Variation)) //blue { if (row[(x * 3) + 1] >= (Formatted_Color[1] - Shade_Variation) & row[(x * 3) + 1] <= (Formatted_Color[1] + Shade_Variation)) //green { if (row[(x * 3) + 2] >= (Formatted_Color[2] - Shade_Variation) & row[(x * 3) + 2] <= (Formatted_Color[2] + Shade_Variation)) //red { Pixel_Coords = new Point(x + rect.X, y + rect.Y); goto end; } } } } } } end: RegionIn_Bitmap.UnlockBits(RegionIn_BitmapData); return Pixel_Coords; }
×
×
  • Create New...