[cairo] Fix for CAIRO_FORMAT_RGB24 pngs

Owen Taylor otaylor at redhat.com
Tue May 17 15:34:09 PDT 2005

On Tue, 2005-05-17 at 17:23 -0400, Owen Taylor wrote:
> Here's a simple patch that gets PNG writing to work correctly for
> surfaces without an alpha channel.
> There are still some potential problems in the PNG code:
>  - The handling of A8 and A1 is different on read and write.
>    If you write out an A8 surface and then read it back, I think
>    you'll get a RGB24 black-and-white 
>  - The code looks very suspicious for endianess:
>     png_set_bgr (png);
>     png_set_filler (png, 0xff, PNG_FILLER_AFTER)
>    Looks like treating little endian xRGB as BGRx bytes.
>    Have people been testing reading / writing pngs on PPC? Is
>    it working?

OK, I understand now how it is working in most cases

On read:

 File (MSB) => <internal transforms above> 
 Temporary (LSB) => <premultiply_data()>
 Final buffer (Native endian)

And on write:

 Source buffer (Native endian) => <unpremultiply_data()>
 Temporary (LSB) =>  <internal transforms> 
 File (MSB)

It just breaks when we don't go through unpremultiply data when
writing RGB24 pngs. Definitely needs some cleanup so that 
we don't do a confusing MSB => LSB => MSB dance.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050517/2851a543/attachment.pgp

More information about the cairo mailing list