Skip to content

Commit

Permalink
Merge pull request #8 from radarhere/improved_dds
Browse files Browse the repository at this point in the history
Added test for BC4U
  • Loading branch information
REDxEYE authored Oct 30, 2023
2 parents 940224e + ddcbfde commit e0a726b
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 9 deletions.
Binary file added Tests/images/bc4u.dds
Binary file not shown.
Binary file removed Tests/images/unimplemented_fourcc.dds
Binary file not shown.
Binary file removed Tests/images/unknown_fourcc.dds
Binary file not shown.
19 changes: 11 additions & 8 deletions Tests/test_file_dds.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
TEST_FILE_DX10_BC5_SNORM = "Tests/images/bc5_snorm.dds"
TEST_FILE_DX10_BC1 = "Tests/images/bc1.dds"
TEST_FILE_DX10_BC1_TYPELESS = "Tests/images/bc1_typeless.dds"
TEST_FILE_BC4U = "Tests/images/bc4u.dds"
TEST_FILE_BC5S = "Tests/images/bc5s.dds"
TEST_FILE_BC5U = "Tests/images/bc5u.dds"
TEST_FILE_BC6H = "Tests/images/bc6h.dds"
Expand Down Expand Up @@ -80,10 +81,18 @@ def test_sanity_dxt5():
assert_image_equal_tofile(im, TEST_FILE_DXT5.replace(".dds", ".png"))


def test_sanity_ati1():
@pytest.mark.parametrize(
"image_path",
(
TEST_FILE_ATI1,
# hexeditted to use BC4U FourCC
TEST_FILE_BC4U,
),
)
def test_sanity_ati1_bc4u(image_path):
"""Check ATI1 images can be opened"""

with Image.open(TEST_FILE_ATI1) as im:
with Image.open(image_path) as im:
im.load()

assert im.format == "DDS"
Expand Down Expand Up @@ -210,12 +219,6 @@ def test_dx10_r8g8b8a8_unorm_srgb():
)


def test_unimplemented_dxgi_format():
with pytest.raises(NotImplementedError):
with Image.open("Tests/images/unimplemented_dxgi_format.dds"):
pass


@pytest.mark.parametrize(
("mode", "size", "test_file"),
[
Expand Down
2 changes: 1 addition & 1 deletion src/PIL/DdsImagePlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,11 +345,11 @@ def _open(self):

# pixel format
pfsize, pfflags, fourcc, bitcount = struct.unpack("<4I", header.read(16))
masks = struct.unpack("<4I", header.read(16))
n = 0
rawmode = None
if pfflags & DDPF.RGB:
# Texture contains uncompressed RGB data
masks = struct.unpack("<4I", header.read(16))
masks = {mask: ["R", "G", "B", "A"][i] for i, mask in enumerate(masks)}
if bitcount == 8:
self._mode = "L"
Expand Down

0 comments on commit e0a726b

Please sign in to comment.