如何在iPhone上从UIImage获取UIColor

3

我想逐点处理我的图像,但是我不知道如何从图像中获取点的颜色。还有如何逐点移动指针?

2个回答

3
您无法直接从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公式中)。
[编辑] 这促使我将代码放在我的博客上(在解决如何对其进行语法突出显示时进行了侧跟踪)。

这大致上是我为我的应用程序解决同样问题的方式。 - Mark Bessey

1
为了帮助节省大家的时间,CreateARGBBitmapContext函数在malloc成功后应该加上memset(bitmapData, 0, bitmapByteCount);以避免源图像中出现随机数据 - 这将把所有内容有效地设置为透明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接