实际上,我认为有一种简单的方法可以实现这一目标。我需要的是纯 alpha 值信息。为了进行测试,我有一个 50 x 55 像素的 PNG,其中每条边上都有一个 5x5 像素的矩形是完全透明的。在这些区域中,alpha 必须为 0。其他任何地方都必须为 255。我非常确定我的 PNG 是正确创建的,而且它看起来也正确。
请告诉我这在理论上是否正确:我创建了一个只有 alpha 通道而没有其他内容的 CGImageRef。这是使用 CGBitmapContextCreate 和 kCGImageAlphaOnly 作为参数完成的。CGBitmapContextGetBitsPerPixel(context) 返回 1,因此它表明我确实每个像素只有一个组件:所需的 alpha 值。我一直在阅读 CGBitmapContextCreate 将处理从给定图像到新创建的上下文的所有转换。我的图像以前是具有透明度的 PNG-24,但来自 Xcode 的 pngcrunch 似乎以某种方式转换它们。
所以,就理论上而言:此时我是否有机会获得正确的、未预乘的 alpha?我得到的值似乎几乎匹配,但在一个 5x5 的大透明正方形中,我得到的值是 19、197、210、0、0、0、98 等。如果它们是真的,我将不得不从图像中看到一些东西。图像本身是纯蓝色的。