ImageWin Module (Windows-only)

The ImageWin module contains support to create and display images on Windows.

ImageWin can be used with PythonWin and other user interface toolkits that provide access to Windows device contexts or window handles. For example, Tkinter makes the window handle available via the winfo_id method:

from PIL import ImageWin

dib = ImageWin.Dib(...)

hwnd = ImageWin.HWND(widget.winfo_id())
dib.draw(hwnd, xy)
class PIL.ImageWin.Dib(image, size=None)[source]

A Windows bitmap with the given mode and size. The mode can be one of “1”, “L”, “P”, or “RGB”.

If the display requires a palette, this constructor creates a suitable palette and associates it with the image. For an “L” image, 128 graylevels are allocated. For an “RGB” image, a 6x6x6 colour cube is used, together with 20 graylevels.

To make sure that palettes work properly under Windows, you must call the palette method upon certain events from Windows.

  • image – Either a PIL image, or a mode string. If a mode string is used, a size must also be given. The mode can be one of “1”, “L”, “P”, or “RGB”.

  • size – If the first argument is a mode string, this defines the size of the image.

draw(handle, dst, src=None)[source]

Same as expose, but allows you to specify where to draw the image, and what part of it to draw.

The destination and source areas are given as 4-tuple rectangles. If the source is omitted, the entire image is copied. If the source and the destination have different sizes, the image is resized as necessary.


Copy the bitmap contents to a device context.


handle – Device context (HDC), cast to a Python integer, or an HDC or HWND instance. In PythonWin, you can use CDC.GetHandleAttrib() to get a suitable handle.

frombytes(buffer: bytes) None[source]

Load display memory contents from byte data.


buffer – A buffer containing display data (usually data returned from tobytes())

paste(im: Image, box: tuple[int, int, int, int] | None = None) None[source]

Paste a PIL image into the bitmap image.

  • im – A PIL image. The size must match the target region. If the mode does not match, the image is converted to the mode of the bitmap image.

  • box – A 4-tuple defining the left, upper, right, and lower pixel coordinate. See Coordinate System. If None is given instead of a tuple, all of the image is assumed.


Installs the palette associated with the image in the given device context.

This method should be called upon QUERYNEWPALETTE and PALETTECHANGED events from Windows. If this method returns a non-zero value, one or more display palette entries were changed, and the image should be redrawn.


handle – Device context (HDC), cast to a Python integer, or an HDC or HWND instance.


A true value if one or more entries were changed (this indicates that the image should be redrawn).

tobytes() bytes[source]

Copy display memory contents to bytes object.


A bytes object containing display data.

class PIL.ImageWin.HDC(dc: int)[source]

Wraps an HDC integer. The resulting object can be passed to the draw() and expose() methods.

class PIL.ImageWin.HWND(wnd: int)[source]

Wraps an HWND integer. The resulting object can be passed to the draw() and expose() methods, instead of a DC.