hpique hpique - 1 year ago 121
iOS Question

Which CGImageAlphaInfo should we use?

The Quartz 2D programming guide defines the availability of the various alpha storage modes:

enter image description here

Which ones should we use for RGB contexts, and why?

For non-opaque contexts,

kCGImageAlphaPremultipliedFirst
or
kCGImageAlphaPremultipliedLast
?

For opaque contexts,
kCGImageAlphaNoneSkipFirst
or
kCGImageAlphaNoneSkipLast
?

Does the choice of value affect performance?

Typically, I see
kCGImageAlphaPremultipliedFirst
for non-opaque and
kCGImageAlphaNoneSkipFirst
for opaque contexts. Some state that these perform better but I haven't seen any hard evidence or documentation about this.

A quick GitHub search shows that developers favor
kCGImageAlphaPremultipliedFirst
over
kCGImageAlphaPremultipliedLast
and
kCGImageAlphaNoneSkipLast
over
kCGImageAlphaNoneSkipFirst
. Sadly, this is little more than anecdotal evidence.

Answer Source

Confirmed by an Apple engineer at WWDC 2014 that we should use kCGImageAlphaPremultipliedFirst or kCGImageAlphaNoneSkipFirst, and that it does affect performance.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download