На самом деле, я думал, что будет легкий способ достичь этого. Что мне нужно, так это чистая альфа-информация. Для тестирования у меня есть PNG размером 50 x 55 пикселей, где на каждом краю прямоугольник 5x5 пикселей полностью прозрачен. В этих областях альфа должна быть 0. В любом другом месте она должна быть 255. Я убедился, что мой PNG создан правильно, и он также выглядит правильно.
Пожалуйста, скажите мне, если это теоретически правильно:
Я создал CGImageRef, который имеет только альфа-канал и ничего больше. Это делается с помощью CGBitmapContextCreate и kCGImageAlphaOnly в качестве параметра.
CGBitmapContextGetBitsPerPixel (context) возвращает мне 1, так что это указывает на то, что у меня действительно только один компонент на пиксель: желаемое альфа-значение.
Я читал, что CGBitmapContextCreate будет обрабатывать все преобразования из данного изображения в новый созданный контекст. Мое изображение ранее было PNG-24 с прозрачностью, но pngcrunch из Xcode, похоже, как-то их конвертирует.
Итак, просто в теории: есть ли у меня хоть какой-то шанс добраться до правильной, неумноженной альфы на этом этапе? Кажется, что значения, которые я получаю, почти совпадают, но в большом прозрачном квадрате 5x5 я получаю значения, такие как 19, 197, 210, 0, 0, 0, 98 и так далее. Если бы они были правдой, я бы увидел что-то на картинке. Само изображение сплошное синее.