Fix vertically inverted rendering of PNG
This commit is contained in:
parent
6ad7260871
commit
c3ab6ff780
@ -266,7 +266,7 @@ inflate_png_inner(struct png_jmp_data *d, uint8_t *buf, size_t bufsz) {
|
|||||||
if (d->decompressed == NULL) ABRT(ENOMEM, "Out of memory allocating decompression buffer for PNG");
|
if (d->decompressed == NULL) ABRT(ENOMEM, "Out of memory allocating decompression buffer for PNG");
|
||||||
d->row_pointers = malloc(d->height * sizeof(png_bytep));
|
d->row_pointers = malloc(d->height * sizeof(png_bytep));
|
||||||
if (d->row_pointers == NULL) ABRT(ENOMEM, "Out of memory allocating row_pointers buffer for PNG");
|
if (d->row_pointers == NULL) ABRT(ENOMEM, "Out of memory allocating row_pointers buffer for PNG");
|
||||||
for (int i = 0; i < d->height; i++) d->row_pointers[d->height - 1 - i] = d->decompressed + i * rowbytes;
|
for (int i = 0; i < d->height; i++) d->row_pointers[i] = d->decompressed + i * rowbytes;
|
||||||
png_read_image(png, d->row_pointers);
|
png_read_image(png, d->row_pointers);
|
||||||
|
|
||||||
d->ok = true;
|
d->ok = true;
|
||||||
|
|||||||
@ -131,8 +131,9 @@ class TestGraphics(BaseTest):
|
|||||||
def test_load_png(self):
|
def test_load_png(self):
|
||||||
s, g, l, sl = load_helpers(self)
|
s, g, l, sl = load_helpers(self)
|
||||||
w, h = 5, 3
|
w, h = 5, 3
|
||||||
img = Image.new('RGBA', (w, h), 'red')
|
rgba_data = os.urandom(w * h * 4)
|
||||||
rgba_data = img.tobytes()
|
img = Image.frombytes('RGBA', (w, h), rgba_data)
|
||||||
|
rgb_data = img.convert('RGB').convert('RGBA').tobytes()
|
||||||
|
|
||||||
def png(mode='RGBA'):
|
def png(mode='RGBA'):
|
||||||
buf = BytesIO()
|
buf = BytesIO()
|
||||||
@ -142,9 +143,9 @@ class TestGraphics(BaseTest):
|
|||||||
i.save(buf, 'PNG')
|
i.save(buf, 'PNG')
|
||||||
return buf.getvalue()
|
return buf.getvalue()
|
||||||
|
|
||||||
for mode in 'RGBA RGB P'.split():
|
for mode in 'RGBA P RGB'.split():
|
||||||
data = png(mode)
|
data = png(mode)
|
||||||
sl(data, f=100, expecting_data=rgba_data)
|
sl(data, f=100, expecting_data=rgb_data if mode == 'RGB' else rgba_data)
|
||||||
|
|
||||||
img = img.convert('L')
|
img = img.convert('L')
|
||||||
rgba_data = img.convert('RGBA').tobytes()
|
rgba_data = img.convert('RGBA').tobytes()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user