Re: Image Format / Pre-Multiplied Alpha Related Feature Request

Lawrence D'Oliveiro <[email protected]>
Newsgroups gmane.comp.lib.cairo
Organization Geek Central
Message-ID <[email protected]>
On Thu, 28 Jan 2016 17:18:04 -0500, William Kappler wrote:

> perhaps I could render color without alpha and then alpha on its own,
> and just blend the data together on my end.

Try oversampling.

Say you want to create an image that is m × n pixels. Create it at,
say, 2m x 2n pixels instead. Undo the premultiplied alpha, then add
each square grouping of 2 × 2 pixel values into a new, deeper pixel
value, creating an image at m × n pixels.

Each original pixel component value in CAIRO_FORMAT_ARGB32 format is 8
bits, with a range of 0..255. Adding together 4 of these gives a range
of 0..1020; replicate the top 2 bits into the bottom 2 to extend the
dynamic range to 0..1023. This gives you an effective bit depth of log₂
1021 ≅ 10 bits. Even if not all 8 bits were meaningful to begin with
(e.g. because of rounding caused by the original premultiplied alpha),
you still gain log₂ 1021 - 8 ≅ 2 extra bits regardless.

If that’s not enough, you can try starting with a 4m × 4n image, and
add together groupings of 4 × 4 pixels to end up with a maximum of log₂
4081 ≅ 12 bits per pixel component at m × n resolution. Here you
replicate the top 4 bits into the bottom 4 bits to extend the 0..4080
dynamic range to 0..4095. And again, even if not all the bits are
meaningful, you still gain log₂ 4081 - 8 ≅ 4 extra bits per pixel
component.

That’s oversampling in a nutshell.
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.