检测两个图像之间的像素碰撞/重叠

2024-03-27

我有两个 UIImageView,其中包含具有某些透明区域的图像。有什么方法可以检查两个图像之间的非透明区域是否发生碰撞?

Thanks.

[更新] 这就是我到目前为止所拥有的,不幸的是它仍然不起作用,但我不明白为什么。

if (!CGRectIntersectsRect(frame1, frame2)) return NO;
NSLog(@"OverlapsPixelsInImage:withImage:> Images Intersect");

UIImage *img1 = imgView1.image;
UIImage *img2 = imgView2.image;
CGImageRef imgRef1 = [img1 CGImage];
CGImageRef imgRef2 = [img2 CGImage];

float minx = MIN(frame1.origin.x, frame2.origin.x);
float miny = MIN(frame1.origin.y, frame2.origin.y);
float maxx = MAX(frame1.origin.x + frame1.size.width, frame2.origin.x + frame2.size.width);
float maxy = MAX(frame1.origin.y + frame1.size.height, frame2.origin.y + frame2.size.height);
CGRect canvasRect = CGRectMake(0, 0, maxx - minx, maxy - miny);

size_t width = floorf(canvasRect.size.width);
size_t height = floorf(canvasRect.size.height);

NSUInteger bitsPerComponent = 8;
NSUInteger bytesPerRow = 4 * width;
unsigned char *rawData = calloc(width * height, sizeof(*rawData));
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);

CGColorSpaceRelease(colorSpace);

CGContextTranslateCTM(context, 0, canvasRect.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextClipToMask(context, CGRectMake(frame2.origin.x - minx, frame2.origin.y - miny, frame2.size.width, frame2.size.height), imgRef2);
CGContextDrawImage(context, CGRectMake(frame1.origin.x - minx, frame1.origin.y - miny, frame1.size.width, frame1.size.height), imgRef1);

CGContextRelease(context);

int byteIndex = 0;
for (int i = 0; i < width * height; i++)
{
    CGFloat alpha = rawData[byteIndex + 3];
    if (alpha > 128) 
    {
        NSLog(@"collided in byte: %d", i);
        free(rawData);
        return YES;
    }
    byteIndex += 4;
}

free(rawData);

return NO;

您可以将两个图像的 Alpha 通道绘制到单个位图上下文中,然后查看数据以查找任何透明像素。看看clipRectToPath()代码在将 CGRect 裁剪为 CGPath http://robnapier.net/blog/clipping-cgrect-cgpath-531。它解决的是不同的问题,但方法是相同的。而不是使用CGContextFillPath()要融入上下文,只需绘制两个图像即可。

这是流程:

  1. 创建仅 alpha 位图上下文 (kCGImageAlphaOnly)
  2. 把你想要比较的所有东西都画进去
  3. 遍历像素查看值。在我的例子中,它考虑< 128做到“透明”。如果你想要完全透明,请使用== 0.
  4. 当您找到透明像素时,该示例只是记下它所在的列。在您的问题中,您可能只是返回YES,或者您可以使用该数据来形成另一个掩码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测两个图像之间的像素碰撞/重叠 的相关文章

  • 如何使用 Javascript 从 Chrome iOS 下载 blob 文件?

    如何使用 Javascript 从 Chrome iOS 下载 blob 文件 我正在从 iOS 下载文件 pdf excel txt png iOS 没有文件系统 这对下载来说是一个问题 我创建了一个代码 根据操作系统和导航器 如果需要
  • 如何在没有 Xcode 的情况下提交 iOS 应用程序?

    我是一名合同开发商 我已经为客户编写了一个应用程序 是的 使用 Xcode 现在我们准备发货了 我想向他发送一份应用程序副本 他可以签署该副本并将其提交到 iTunes 应用程序商店 但是他没有或没有使用 Xcode 虽然这是一个备份计划
  • 关闭应用程序后如何调试

    我正在尝试重现问题 这需要在特定位置关闭并重新打开我的应用程序 这是我的问题 1 如何查看我的日志 使用NSLog命令 当我的 iPhone 未连接到 XCode 时 2 是否可以将iPhone模拟器的特定位置 例如市中心 设置为默认位置
  • 如何在 Swift 中解析蓝牙设备发送的浮点数?

    在我的 iOS 应用程序上 我需要解码蓝牙接收到的 Float 值 并从不同的设备 不是 iOS 获取 4 个字节 因此我需要一个 便携式 4 字节 Float 格式 目前发件人正在使用以下格式 数据编码 0xCCBBAAAEE 0xEE
  • 对 Objective-c 对象数组进行排序

    所以我有一个自定义课程Foo有许多成员 interface Foo NSObject NSString title BOOL taken NSDate dateCreated 在另一堂课上我有一个NSMutableArray包含这些对象的列
  • 如何获取 HKWorkoutActivityType 的字符串描述?

    我正在开发一项功能 可以从健康应用程序中读取 HKWorkout 样本 我想向用户显示一个描述字符串 告诉他们锻炼是什么 我能看到的唯一可能向用户指示样本代表的活动类型的属性是workoutActivityType财产 我应该如何将 HKW
  • iOS 中通过 USB 进行反向端口转发

    我在桌面上有一个 Web 套接字服务器 在 iPhone 设备上有一个客户端 我想使用 USB 而不是任何网络与他们通信 我已经使用 adb reverse 在 android 上实现了它 但无法找到适用于 iOS 的任何解决方案 我尝试使
  • 如何在 iPhone 上使用 glib? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这几天我正在做一个项目 我的项目中包含了一个第三方库 该库是基于glib的 这真的让我抓狂 大家能告诉我我该怎么办吗 如何在 iPho
  • 为什么分割视图控制器必须始终是您创建的任何界面的根?

    在苹果的开发者指南中 他们指出 分割视图控制器必须始终是您创建的任何界面的根 see here http developer apple com library ios featuredarticles ViewControllerPGfo
  • swift:移动动画

    我在故事板中有 viewController 还有4个正方形 我想将我的方块放在视图中 首先我想显示两个正方形 如果我按下按钮 我希望我的红色 2 个方块向左移动 然后显示接下来的 2 个蓝色方块 就像这部动画 我需要创建一个scrollV
  • Xcode 8.2.1 无法添加文件夹引用

    我的 Xcode 8 2 1 不允许我添加文件夹引用 我尝试过的 我右键单击名为 Unity 的文件夹 然后单击 将文件添加到项目 在选项下选中 创建文件夹引用 我的文件夹被添加为红色文件 而不是通常的蓝色文件夹 我尝试将文件的 类型 更改
  • 如何在 UINavigationController 中收到弹出视图的通知?

    我想在用户按下我的后退按钮时执行操作UINavigationController当到达某个时UIViewController 不幸的是它看起来像UINavigationControllerDelegate没有任何方法来获取视图弹出的通知 作
  • 在 iPhone 中使用 Soap Web 服务与 wsdl2objc?

    我确实意识到这是一个重复的问题 但是唯一的其他问题已经很老了 所以我想知道是否有人最近有过使用最新版本的经验wsdl2objc http code google com p wsdl2objc 我正在编写一个应用程序 该应用程序将与第三方应
  • 如何让我的“点击”功能与 iOS 配合使用

    我有一组充当按钮的 Div 这些按钮有一个简单的 jquery click 函数 该函数适用于除 iOS 之外的所有浏览器 例如 div class button click me div and button click function
  • Swift 每 5 天重复一次 LocalNotification

    如何每 5 天上午 10 00 重复一次 LocalNotification 我尝试这个 但它不起作用 let content UNMutableNotificationContent content title Hello content
  • iOS图片上的线测量

    我需要一些帮助来开始绘制末端带有圆圈的线条 并测量其长度 我能够划清界限 但无法让它移动 花了几个小时决定在 SO 上发布 因此 请参阅下图并指导我开始 任何使用 Objective C 的示例或教程都会有帮助 谢谢 这个想法看起来实现起来
  • UIView transitionFromView:如何在转换过程中实现黑色背景?

    我使用下一个代码 UIView transitionFromView viewA toView viewB duration 1 0 options UIViewAnimationOptionTransitionFlipFromLeft c
  • 在 ios 中从 XMPP 服务器检索存档的消息

    我正在将 XMPP 功能集成到我的 ios 应用程序中 但遇到了一个无法解决的问题 问题是我无法从服务器获取存档的消息 我的客户能够登录 并且我已经成功测试了多个服务调用 发送 接收消息 获取有关用户的信息 发送后
  • 如何知道我的 Xcode iPhone 项目是否使用 ARC?

    我想知道我的 Xcode iPhone 项目是否正在使用 ARC 但我不记得在创建项目时是否勾选了该框 我怎样才能得到这些信息 选择您的项目 然后构建设置 寻找Objective C 自动引用计数 in the Apple LLVM 编译器
  • 应用程序终止时处理通知(iOS)

    我正在开发接收通知的应用程序 使用苹果推送通知 我正在存储这些通知并在一个控制器中显示为列表 据我了解 每当收到通知时都会调用 didReceiveRemoteNotification 当应用程序位于前台和后台时 我可以通过 didRece

随机推荐

  • 完成部分网格并使其不漏水

    我正在从 RealSense 相机捕获点云 并使用 Trimesh 库将它们转换为网格 问题是我只能从中得到一个不防水的网格 如何 完成 网格并使其防水 I tried trimesh repair broken faces mesh co
  • jquery切换 - 在切换功能之间切换?

    大家好 我喜欢 jquery 的切换功能 然而目前我面临一个小问题 我不知道如何以最好的方式解决它 我有一个名为 searchbox 的 div 它取决于用户设置是隐藏还是可见 如果我单击按钮 则触发的切换功能应该是 slideDown s
  • 创建Python包并导入模块

    我正在尝试编写我的第一个 Python 包 几乎所有模块都需要使用 NumPy 我应该写吗import numpy在每个模块中或者包中是否有某个地方我可以将其导入一次 以便每个模块都可以使用它 最好的方法是什么 是的 只需将其导入到需要的地
  • 在 iTunes Connect 中提交应用程序时附加屏幕截图的顺序

    我目前正在提交我的应用程序以供审核 并且我已经上传了主屏幕截图 但不确定如何让我的其他屏幕截图以正确的顺序显示 您必须在上传之前将它们全部选择 并且没有任何指示它们的顺序 有人可以告诉我您是否需要按正确顺序或相反顺序选择屏幕截图吗 以相反的
  • Cloud Dataflow 中的作业失败:启用 Dataflow API

    我目前正在尝试将 Dataflow 与 Pub Sub 结合使用 但收到此错误 工作流程失败 原因 6e74e8516c0638ca 刷新您的凭据时出现问题 请检查 1 为您的项目启用Dataflow API 2 您的项目有一个机器人服务帐
  • 在 Visual Studio 2010 项目中包含外部库

    我是视觉工作室的新手 似乎无法在任何地方找到这个问题的答案 我正在使用 VS2010 进行 VC 项目 我有另一个项目构建到 lib 文件中并设置为参考 但无法弄清楚如何实际包含标头 事实证明谷歌毫无用处 请帮忙 通常 这是通过将包含文件所
  • qt/c++ 动态命名变量

    我正在为我的一项大学作业在 Qt 中开发一个 html 编辑器 并且我在某些变量的命名方面遇到了问题 问题是这样的 当用户决定加载他们的 项目 时 程序会迭代该文件夹并查找其中有多少个 html 文件 然后它会创建要显示的选项卡 我有一个自
  • Symfony2 Assetic 路由和资源错误

    我有一个模板 例如index html php 我在其中使用 php assetic 加载器 如下所示 如果我对模板文件进行任何更改 我会得到路线 assetic 2b431f4 不存在 如果我改变 assetic use controll
  • C 中逐个字符读取文件

    我正在用 C 语言编写 BF 解释器 但在读取文件时遇到了问题 我以前用过scanf为了读取第一个字符串 但是你的 BF 代码中不能有空格或注释 现在这就是我所拥有的 char readFile char fileName FILE fil
  • EditText 随选择缩放

    我有一个EditText我想缩放它并滚动setScaleX setScaleY它工作正常 文本正在正确的位置进行编辑 但是当我尝试选择文本时 它会将选择手柄绘制到位置 就像文本未缩放时一样 我们都知道bug https code googl
  • 对公司名称的 DataFrame 进行非规范化 [第 1 部分]

    我有一个公司名称的 Pandas DataFrame 其结构如下 import numpy as np import pandas as pd df pd DataFrame name Nitron Pulset Rotaxi postal
  • 我如何知道创建项目时使用的是哪个版本的 Delphi

    如果我有 Delphi 项目的完整源代码 我如何知道使用哪个版本 即 Delphi 5 Delphi 7 Delphi 2010 等 来创建它 而无需在 Delphi 中打开它 我有许多可以追溯到 Delphi 6 时代的项目 我想对它们进
  • OpenId Connect 与 wso2 仅返回子声明

    当我询问用户 WSO2 的信息时 响应仅包含他的子信息 Request GET https srv wso2 domain com 9443 oauth2 userinfo schema openid Request headers Acc
  • AngularJS - 涉及异步数据的依赖注入

    我想让当前登录的用户 ID 和用户名可供我的 Angular 指令使用 我创建了一个 API 端点来检索此信息 以及一些其他信息 问题是 API 调用是异步的 var url baseUrl api sessions http get ur
  • 没有指定 dataType 的自定义 ajaxTransport 函数不会触发(根本!)

    我一直在尝试设置jQuery 的自定义 ajaxTransports http api jquery com extending ajax Transports在我们的产品的某些场景下缩短某些工作流程 然而 我在让这些运输受到尊重方面取得了
  • 将 CSV 文件转换为 Java - 向后复制

    我之前问过一个关于在java中将CSV文件转换为二维数组的问题 我完全重写了我的代码 几乎要重新编写了 我现在遇到的唯一问题是它正在向后打印 换句话说 列打印在行应该打印的位置 反之亦然 这是我的代码 int board new int 2
  • D 中是否有相当于 C++ 的 Future/Promise ?

    D 世界中是否存在 C 世界中的未来 承诺等价物 当然有标准并行度 http dlang org phobos std parallelism html但它并不完全具有承诺 未来组合的功能 没有相当于获取未来或设置结果或异常的功能 您也不能
  • Pytorch:了解 nn.Module 类内部如何工作

    一般来说 一个nn Module可以由子类继承 如下所示 def init weights m if type m nn Linear torch nn init xavier uniform m weight class LinearRe
  • 如何使用 jQuery 从 iframe 调用父页面上的函数?

    我有一个上传表单 可以发布到隐藏的 iframe 我试图从 iframe 调用父页面上的函数 但收到错误 top stopUpload 不是函数 这样做的正确方法是什么 父页面 document ready function documen
  • 检测两个图像之间的像素碰撞/重叠

    我有两个 UIImageView 其中包含具有某些透明区域的图像 有什么方法可以检查两个图像之间的非透明区域是否发生碰撞 Thanks 更新 这就是我到目前为止所拥有的 不幸的是它仍然不起作用 但我不明白为什么 if CGRectInter