実際、それを実現する簡単な方法があると思いました。必要なのは純粋なアルファ値情報です。テスト用に、50 x 55ピクセルのPNGがあり、すべてのエッジで5x5ピクセルの長方形が完全に透明になっています。これらの領域では、アルファは0である必要があります。それ以外の場合は255である必要があります。PNGが正しく作成され、正しく表示されることを確認しました。
これが理論的に正しいかどうか教えてください。アルファチャネルのみを含み、他には何もないCGImageRefを作成しました。これは、パラメータとしてCGBitmapContextCreateとkCGImageAlphaOnlyを使用して行われます。CGBitmapContextGetBitsPerPixel(context)は私に1を返すので、ピクセルごとに実際には1つのコンポーネント(目的のアルファ値)しかないことを示しています。CGBitmapContextCreateが、指定された画像から新しく作成されたコンテキストへのすべての変換を処理することを読んでいます。私の画像は以前は透明度のあるPNG-24でしたが、Xcodeのpngcrunchはどういうわけかそれらを変換しているようです。
したがって、理論的には、この時点で、事前に乗算されていない正しいアルファに到達する機会はありますか?私が得る値はほぼ一致しているように見えますが、大きな5x5の透明な正方形では、19、197、210、0、0、0、98などの値が得られます。もしそれらが本当なら、私は画像から何かを見なければならないでしょう。画像自体は青一色です。