确定 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 是不是在图像区域内的主要内容,如果未能解决你的问题,请参考以下文章

确定一个点是不是在一个区域内

如何确定当前位置是不是在 KML 定义的区域内?

使用 Apple 地图确定用户是不是在多边形区域之外

查找一个点(纬度,经度)是不是在 OpenStreetMaps“方式”(区域)内

如何判断一个指定的经纬度点是不是落在一个多边形区域内

图像处理