With premultiplied alpha, a stored colour triple already includes its alpha channel multiplier: , where is the corresponding straight alpha colour. The alpha value itself is retained. This is also called associated alpha. For , recover ; at zero alpha the multiplication loses the original colour. PNG uses unassociated samples rather than this convention.[ref]
For an original Linear-light RGB example, red with becomes the stored quadruple . The source-over compositing contribution of this sample is already . Multiplying its first three entries by alpha again would make the red contribution instead of .
Premultiplied alpha also makes a useful linear interpolation example transparent. Let sample A be opaque red, , and sample B be fully transparent blue, . Their premultiplied quadruples are and . Averaging them gives
Placed over black, this contributes . Averaging the straight colour triples and alphas separately would instead give , , contributing over black. That blue contribution came from colour attached to a fully transparent sample. The calculation explains how an interpolation convention can create a coloured fringe.
The multiplication convention and the color space are separate choices. The example uses Linear-light RGB throughout. A file decoder, texture sampler and alpha compositing stage must agree on both the colour encoding and whether the samples use straight alpha or premultiplied alpha.
Unpremultiplication converts premultiplied alpha colour samples back to straight alpha by dividing out a nonzero alpha channel. If is the stored premultiplied colour triple, then
The alpha value is retained. PNG's encoder guidance specifies this division when converting associated input samples to its unassociated representation, followed by scaling to the output sample range and rounding.[ref]
For an original exact-arithmetic example in Linear-light RGB, let and . The recovered colour is . Multiplying that triple by the retained alpha restores . Dividing the alpha itself would instead destroy the transparency information.
At , all exact premultiplied colour triples arising from finite equal zero. The original colour cannot be recovered from that result: many inputs mapped to the same stored value. PNG's conversion guidance chooses black for this case; that is a defined output convention, not recovered hidden colour.[ref]
Finite precision adds another limitation. Suppose , , and the premultiplied channels are rounded to eight-bit normalized codes. Their integer codes become , while the alpha code is one. Unpremultiplication then yields normalized straight colour , far from the original triple. For fixed exact alpha, a stored component error becomes after division. Near-zero alpha can therefore magnify rounding error even when the conversion formula is correct.

Articles by others on the same topic (0)

There are currently no matching articles.