Как я узнаю, является ли изображение "Premultiplied Alpha"? - PullRequest
3 голосов
/ 05 февраля 2012

Я слышал, что для смешивания слоев и т. Д. Требуется только предварительное умножение альфа. Как узнать, является ли мое первоначальное изображение предварительно умноженным альфа?

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

Вы не можете.

Единственное, что вы можете проверить, это если оно не умножено заранее. Чтобы сделать это, пройдите все пиксели и посмотрите, есть ли значение цвета, которое имеет более высокое значение, чем допускает альфа if(max(col.r,col.g,col.b) > 255*alpha)//not premul. Любые другие случаи неоднозначны и могут или не могут быть предварительно умножены. Ваше лучшее предположение, вероятно, состоит в том, чтобы предположить, что это не так, как в большинстве PNG.

Редактировать: на самом деле, даже код, который я выложил, не будет работать, так как существует множество PNG с белым матовым, так что изображение должно включать части, которые имеют альфа 0, чтобы определить матовый цвет первый.

3 голосов
/ 31 августа 2012

Android Bitmap хранит изображения, загруженные из PNG с предварительно умноженным альфа. Вы не можете получить без предварительного умножения оригинальные цвета из него обычным способом.

Для загрузки изображений без предварительного умножения RGB каналов мне нужно использовать стороннюю PNGDecoder отсюда: http://twl.l33tlabs.org/#downloads

...