diff --git a/Tests/images/bc5s.png b/Tests/images/bc5s.png index 657d723053a..5e7a1b95e1b 100644 Binary files a/Tests/images/bc5s.png and b/Tests/images/bc5s.png differ diff --git a/src/libImaging/BcnDecode.c b/src/libImaging/BcnDecode.c index dfd4b3e07a4..5e4296eeba1 100644 --- a/src/libImaging/BcnDecode.c +++ b/src/libImaging/BcnDecode.c @@ -850,10 +850,12 @@ decode_bcn( DECODE_LOOP(3, 16, rgba); DECODE_LOOP(4, 8, lum); case 5: + { + int sign = strcmp(pixel_format, "BC5S") == 0 ? 1 : 0; while (bytes >= 16) { rgba col[16]; - memset(col, 0, 16 * sizeof(col[0])); - decode_bc5_block(col, ptr, strcmp(pixel_format, "BC5S") == 0 ? 1 : 0); + memset(col, sign ? 128 : 0, 16 * sizeof(col[0])); + decode_bc5_block(col, ptr, sign); put_block(im, state, (const char *)col, sizeof(col[0]), C); ptr += 16; bytes -= 16; @@ -862,10 +864,13 @@ decode_bcn( } } break; + } case 6: + { + int sign = strcmp(pixel_format, "BC6HS") == 0 ? 1 : 0; while (bytes >= 16) { rgba col[16]; - decode_bc6_block(col, ptr, strcmp(pixel_format, "BC6HS") == 0 ? 1 : 0); + decode_bc6_block(col, ptr, sign); put_block(im, state, (const char *)col, sizeof(col[0]), C); ptr += 16; bytes -= 16; @@ -874,6 +879,7 @@ decode_bcn( } } break; + } DECODE_LOOP(7, 16, rgba); #undef DECODE_LOOP }