Skip to content

Commit

Permalink
Skip failing records when rendering
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Oct 26, 2024
1 parent 81a3bf5 commit ce40591
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
12 changes: 11 additions & 1 deletion Tests/test_file_wmf.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
from __future__ import annotations

from io import BytesIO
from pathlib import Path
from typing import IO

import pytest

from PIL import Image, ImageFile, WmfImagePlugin

from .helper import assert_image_similar_tofile, hopper
from .helper import assert_image_equal_tofile, assert_image_similar_tofile, hopper


def test_load_raw() -> None:
Expand All @@ -34,6 +35,15 @@ def test_load() -> None:
assert im.load()[0, 0] == (255, 255, 255)


def test_render() -> None:
with open("Tests/images/drawing.emf", "rb") as fp:
data = fp.read()
b = BytesIO(data[:808] + b"\x00" + data[809:])
with Image.open(b) as im:
if hasattr(Image.core, "drawwmf"):
assert_image_equal_tofile(im, "Tests/images/drawing.emf")


def test_register_handler(tmp_path: Path) -> None:
class TestHandler(ImageFile.StubHandler):
methodCalled = False
Expand Down
13 changes: 9 additions & 4 deletions src/display.c
Original file line number Diff line number Diff line change
Expand Up @@ -716,6 +716,14 @@ PyImaging_EventLoopWin32(PyObject *self, PyObject *args) {

#define GET32(p, o) ((DWORD *)(p + o))[0]

BOOL
enhMetaFileProc(
HDC hdc, HANDLETABLE FAR *lpht, CONST ENHMETARECORD *lpmr, int nHandles, LPARAM data
) {
PlayEnhMetaFileRecord(hdc, lpht, lpmr, nHandles);
return TRUE;
}

PyObject *
PyImaging_DrawWmf(PyObject *self, PyObject *args) {
HBITMAP bitmap;
Expand Down Expand Up @@ -796,10 +804,7 @@ PyImaging_DrawWmf(PyObject *self, PyObject *args) {
/* FIXME: make background transparent? configurable? */
FillRect(dc, &rect, GetStockObject(WHITE_BRUSH));

if (!PlayEnhMetaFile(dc, meta, &rect)) {
PyErr_SetString(PyExc_OSError, "cannot render metafile");
goto error;
}
EnumEnhMetaFile(dc, meta, enhMetaFileProc, NULL, &rect);

/* step 4: extract bits from bitmap */

Expand Down

0 comments on commit ce40591

Please sign in to comment.