slyrus/opticl — pull request #2 by akovalenko (2012-01-18 14:27:55+00:00)
Title: PNG input conversion rewrite for better transparency/alpha support.

There are two possible representations of transparency in PNG files:
alpha channel for :truecolor-alpha and :greyscale-alpha colour types,
and a separate transparency map in a tRNS ancillary chunk. PNG-READ
retains the difference by keeping data from tRNS as a separate
TRANSPARENCY property of png-state.

New version of OPTICL:READ-PNG-STREAM uses transparency data for
OPTICL alpha channel when reading a PNG with no "native" alpha channel
implied by colour-type. Additionally, as OPTICL has no equivalent for
:greyscale-alpha, greyscale images with (any kind of) transparency
data are converted to RGBA.

Due to a bug in PNG-READ (fix committed on pull request
), PNG-READ::TRANPARENCY
property contained a raw representation of tRNS ancillary chunk
instead of 2D 8-bit transparency data (that's how it was intended to
work). A workaround for unfixed PNG-READ was added to this version of
OPTICL:READ-PNG-STREAM: If TRANSPARENCY is not a 2D-array, its content
is ignored (as if there were no alpha channel). Warning or error could
be more appropriate here.

Turning :greyscale-alpha colour type to RGBA is an example of new use
cases supported by rewritten READ-PNG-STREAM, even with older
PNG-READ.