确定 CGPoint 是不是在图像区域内
Posted
技术标签:
【中文标题】确定 CGPoint 是不是在图像区域内【英文标题】:Determine if CGPoint is within image area确定 CGPoint 是否在图像区域内 【发布时间】:2012-03-04 10:13:43 【问题描述】:我试图弄清楚 CGPoint 是否位于图像的形状内。图像是一个简单的黑色形状,如下面的两个。我想创建一个方法来确定 CGPoint 是否位于该形状的黑色区域内。
我认为这需要两件事: 1)将图像变成可以用代码读取的东西(不确定这将使用什么样的图像处理或如何处理)
2) 使用它作为参考来确定 CGPoint 是否位于其中。
任何帮助或想法表示赞赏。我以前从未做过图像处理类型的编码。谢谢!
【问题讨论】:
您可以创建一个由您控制的数据支持的CGBitmapContext
,采用您选择的格式。您可以将其设置为 1x1 上下文,设置 CTM 以使您希望测试的点位于原点,然后将图像绘制到上下文中。然后测试你的数据,看看你有黑色像素还是白色像素。
@Kevin Ballard:为什么不提供这个答案呢?听起来像是一个解决方案。
@DarkDust:因为我不想花时间实际写出一些代码。
【参考方案1】:
看看 Ole Begemann 的 OBShapedButton。在那里你会找到一个包含ColorAtPixel
方法的UIImage
类别。猜猜这就是你要找的东西。
然后您可以通过以下方式获取某个像素的UIColor
:
UIImage *image = [UIImage imageWithCGImage:yourCGImage];
CGPoint point = CGPointMake(pointx,pointy);
UIColor *pixelColor = [image colorAtPixel:point];
为了简化获取 RGB 值,您还可以查看 uicolor-utilities。使用UIColor-Expanded
类别,您可以简单地确定红色和蓝色分量。如果它们很低(像素很暗),则测试点在内部形状。
CGFloat redComp = [pixelColor red];
CGFloat blueComp = [pixelColor blue];
BOOL isInsideShape = ((redComp < 0.5) && (blueComp < 0.5));
【讨论】:
以上是关于确定 CGPoint 是不是在图像区域内的主要内容,如果未能解决你的问题,请参考以下文章