Como converter o canal alfa de UIImage / CGImageRef em mascarar?

Como posso extrair o canal alfa de um UIImage ou CGImageRef e convertê-lo em uma máscara que eu possa usar com CGImageMaskCreate?

Por exemplo

Essencialmente, dada qualquer imagem, eu não ligo para as cores dentro da imagem. Tudo o que eu quero é criar uma imagem em escala de cinza que represente o canal alfa. Esta imagem pode ser usada para mascarar outras imagens.

Um exemplo de comportamento disso está no UIBarButtonItem quando você fornece uma imagem de ícone. De acordo com os documentos da Apple, afirma:

As imagens exibidas na barra são derivadas desta imagem. Se essa imagem for muito grande para caber na barra, ela será dimensionada para caber. Normalmente, o tamanho de uma imagem da barra de ferramentas e da barra de navegação é de 20 x 20 pontos. Os valores alfa na imagem de origem são usados para criar as imagens - valores opacos são ignorado

O UIBarButtonItem captura qualquer imagem e olha apenas para o alfa, não para as cores da image

questionAnswers(3)

yourAnswerToTheQuestion