From 8a086edbe965bff4d89fc3b189e021f0b1a2b322 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Mon, 16 Sep 2024 08:22:58 +1000 Subject: [PATCH] Cast handle to int --- Tests/test_imagewin.py | 12 ++++++++++++ src/PIL/ImageWin.py | 19 +++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Tests/test_imagewin.py b/Tests/test_imagewin.py index a836bb90b..e7af160dd 100644 --- a/Tests/test_imagewin.py +++ b/Tests/test_imagewin.py @@ -60,6 +60,18 @@ class TestImageWinDib: with pytest.raises(ValueError): ImageWin.Dib(mode) + def test_dib_hwnd(self) -> None: + mode = "RGBA" + size = (128, 128) + wnd = 0 + + dib = ImageWin.Dib(mode, size) + hwnd = ImageWin.HWND(wnd) + + dib.expose(hwnd) + dib.draw(hwnd, (0, 0) + size) + assert isinstance(dib.query_palette(hwnd), int) + def test_dib_paste(self) -> None: # Arrange im = hopper() diff --git a/src/PIL/ImageWin.py b/src/PIL/ImageWin.py index 6fc7cfaf5..98c28f29f 100644 --- a/src/PIL/ImageWin.py +++ b/src/PIL/ImageWin.py @@ -98,14 +98,15 @@ class Dib: HDC or HWND instance. In PythonWin, you can use ``CDC.GetHandleAttrib()`` to get a suitable handle. """ + handle_int = int(handle) if isinstance(handle, HWND): - dc = self.image.getdc(handle) + dc = self.image.getdc(handle_int) try: self.image.expose(dc) finally: - self.image.releasedc(handle, dc) + self.image.releasedc(handle_int, dc) else: - self.image.expose(handle) + self.image.expose(handle_int) def draw( self, @@ -124,14 +125,15 @@ class Dib: """ if src is None: src = (0, 0) + self.size + handle_int = int(handle) if isinstance(handle, HWND): - dc = self.image.getdc(handle) + dc = self.image.getdc(handle_int) try: self.image.draw(dc, dst, src) finally: - self.image.releasedc(handle, dc) + self.image.releasedc(handle_int, dc) else: - self.image.draw(handle, dst, src) + self.image.draw(handle_int, dst, src) def query_palette(self, handle: int | HDC | HWND) -> int: """ @@ -148,14 +150,15 @@ class Dib: :return: The number of entries that were changed (if one or more entries, this indicates that the image should be redrawn). """ + handle_int = int(handle) if isinstance(handle, HWND): - handle = self.image.getdc(handle) + handle = self.image.getdc(handle_int) try: result = self.image.query_palette(handle) finally: self.image.releasedc(handle, handle) else: - result = self.image.query_palette(handle) + result = self.image.query_palette(handle_int) return result def paste(