title: Pyautogui and pyscreeze crash with windll.user32.ReleaseDC failed
body: <p>I'm trying to compare certain pixel values in my pyautogui script, but it crashes with following error message after either multiple successful runs, or sometimes just straight on the first call:</p>
  
  <pre><code>Traceback (most recent call last):
    File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 219, in &lt;module&gt;
      battle = observeBattle()
    File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 180, in observeBattle
      statii = getHeroBattlePixels()
    File "F:\Koodit\Python\HeroWars NNet\Assets\autodataGet.py", line 32, in getHeroBattlePixels
      colormatch = pyautogui.pixelMatchesColor(location[0], location[1], alive, tolerance=5)
    File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 557, in pixelMatchesColor
      pix = pixel(x, y)
    File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 582, in pixel
      return (r, g, b)
    File "E:\Program Files\Python\lib\contextlib.py", line 120, in __exit__
      next(self.gen)
    File "E:\Program Files\Python\lib\site-packages\pyscreeze\__init__.py", line 111, in __win32_openDC
      raise WindowsError("windll.user32.ReleaseDC failed : return 0")
  OSError: windll.user32.ReleaseDC failed : return 0
  </code></pre>
  
  <p>My code (this is called multiple times, sometimes it crashes on first run, sometimes it runs nicely for around 100 calls before failing, also, my screen is 4K, so the resolutions get big):</p>
  
  <pre><code>def getSomePixelStatuses():
      someLocations= [
                          [1200, 990],
                          [1300, 990],
                          [1400, 990],
                          [1500, 990],
                          [1602, 990],
                          [1768, 990],
                          [1868, 990],
                          [1968, 990],
                          [2068, 990],
                          [2169, 990]
                          ]
      status = []
      someValue= (92, 13, 12)
      for location in someLocations:
          colormatch = pyautogui.pixelMatchesColor(location[0], location[1], someValue, tolerance=5)
          status.append(colormatch)
      return status
  
  </code></pre>
  
  <p>I have no idea how to mitigate this problem. It would seem that pyautogui uses pyscreeze to read pixel values on screen, and most probable candidate for the place where error occurs is the pyscreeze pixel function:</p>
  
  <pre><code>def pixel(x, y):
      """
      TODO
      """
      if sys.platform == 'win32':
          # On Windows, calling GetDC() and GetPixel() is twice as fast as using our screenshot() function.
          with __win32_openDC(0) as hdc: # handle will be released automatically
              color = windll.gdi32.GetPixel(hdc, x, y)
              if color &lt; 0:
                  raise WindowsError("windll.gdi32.GetPixel failed : return {}".format(color))
              # color is in the format 0xbbggrr https://msdn.microsoft.com/en-us/library/windows/desktop/dd183449(v=vs.85).aspx
              bbggrr = "{:0&gt;6x}".format(color) # bbggrr =&gt; 'bbggrr' (hex)
              b, g, r = (int(bbggrr[i:i+2], 16) for i in range(0, 6, 2))
              return (r, g, b)
      else:
          # Need to select only the first three values of the color in
          # case the returned pixel has an alpha channel
          return RGB(*(screenshot().getpixel((x, y))[:3]))
  </code></pre>
  
  <p>I installed these libraries just yesterday, and I'm running python 3.8 on windows 10, and pyscreeze is version 0.1.25 so in theory everything should be up to date, but somehow something ends up crashing. Is there a way to mitigate this, either modifying my code, or even the library itself, or is my environment not suitable for this operation?</p>