您无法直接从UIImage中实现此操作,但可以将图像呈现为位图上下文,并使用您提供的内存缓冲区进行测试,然后直接测试内存。 听起来比实际情况要复杂一些,但仍可能比您想听到的更复杂。如果您有Erica Sadun的《iPhone Developer's Cookbook》,那么从第54页开始有很好的覆盖范围。总体而言,我建议购买这本书,如果您还没有它的话。我独立几乎完全相同的代码,但遇到了一个错误,看起来Sadun的代码也可能存在这个问题。在pointInside方法中,点和大小值是浮点数,并在转换为整数之前作为浮点数相乘。如果您的坐标是离散值,则这是可以接受的,但在我的情况下,我提供了子像素值,因此公式失效了。当然,一旦确定了问题,修复就很容易-只需将每个坐标转换为整数,然后再相乘-因此,在Sadun的情况下,它将是: long startByte = ((int)point.y * (int)size.width) + (int)point.x) * 4; 此外,Sadun的代码和我的代码仅关注alpha值,因此我们使用仅获取alpha值的8位像素。更改CGBitMapContextCreate调用应该允许您获得实际的颜色值(如果每像素超过8位,则还需要将其乘入pointInside公式中)。[编辑] 这促使我将代码放在我的博客上(在解决如何对其进行语法突出显示时进行了侧跟踪)。
为了帮助节省大家的时间,CreateARGBBitmapContext函数在malloc成功后应该加上memset(bitmapData, 0, bitmapByteCount);以避免源图像中出现随机数据 - 这将把所有内容有效地设置为透明。