Указывая предварительно умноженную альфу - kCGImageAlphaPremultipliedLast - я - непреднамеренно - приказываю CoreGraphics умножить каналы rgb на альфу или - что я предположил - я просто указываю, что формат входящего изображения имеет предварительно умноженную альфа?
Ни один. Вы указали формат адресата (контекст), а не источника. Источник - объект изображения - знает, предварительно ли умножены цвета его пикселей, и Кварц будет использовать эти знания, чтобы делать правильные вещи, когда рисует исходное изображение в контексте.
Это означает, что пиксели в вашем буфере будут предварительно умножены, а не дважды , но они будут предварительно умножены в буфере контекста, независимо от того, были ли предварительно умножены исходные цвета (если они были, нет необходимости умножьте снова, если они не были, то это будет умножаться в первый раз).
Я не знаю достаточно OpenGL, чтобы знать, является ли это проблемой, и если это так, то, вероятно, нет решения для этого кода: по крайней мере, на Mac Quartz не поддерживает неумноженные цвета в растровых контекстах .
Вместо этого вы можете попробовать этот формат хранения .