将 UIView 图层转换为 UIImage

2023-11-22

我正在视图中使用 AVPlayerLayer 播放视频。我需要将视图转换为图像,我尝试过

[myview.layer renderInContext:context];

但这只给出黑色图像。我想将当时的视图转换为带有视频的图像。这个转换会同时发生0.05s。

我尝试使用 AVAssetImageGenerator。这给了我使用 Asset 的正确图像。但它花费了更多的时间,这给我的应用程序带来了一些性能问题。任何人都可以帮助我如何减少特定 CMTime 将视频转换为图像的过程。

下面是我的编码。

- (UIImage *)currentItemScreenShot
{
    AVPlayer *abovePlayer = [objVC player];
    if(imageGenerator == nil)
    {
        AVAsset *asset = [[[objVC player] currentItem] asset];
        imageGenerator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
    }

    CMTime time = [[abovePlayer currentItem] currentTime];
    if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
        [imageGenerator setRequestedTimeToleranceBefore:kCMTimeZero];
        [imageGenerator setRequestedTimeToleranceAfter:kCMTimeZero];
    }

    CGImageRef imgRef = [imageGenerator copyCGImageAtTime:time
                                               actualTime:NULL
                                                    error:NULL];
    if (imgRef == nil) {
        if ([imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceBefore:)] && [imageGenerator respondsToSelector:@selector(setRequestedTimeToleranceAfter:)]) {
            [imageGenerator setRequestedTimeToleranceBefore:kCMTimePositiveInfinity];
            [imageGenerator setRequestedTimeToleranceAfter:kCMTimePositiveInfinity];
        }
        imgRef = [imageGenerator copyCGImageAtTime:time actualTime:NULL error:NULL];
    }
    UIImage *image = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);

    image = [self reverseImageByScalingToSize:image.size :image];
    return image;
}

MPMoviePlayerController 可以轻松地从电影中的某个点获取图像。

    - (UIImage*)imageFromVideoAtPath:(NSString *)path atTime:(NSTimeInterval)time {
    NSURL *videoURL = [NSURL fileURLWithPath:path];
    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
    [moviePlayer prepareToPlay];
    UIImage *thumbnail = [moviePlayer thumbnailImageAtTime:time timeOption:MPMovieTimeOptionNearestKeyFrame];
    [moviePlayer stop];
    return thumbnail;
}

只要用视频的路径来调用它,然后在你想要获取图像的时候就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UIView 图层转换为 UIImage 的相关文章

  • 如何检测Retina高清显示屏?

    UIScreen有一个新的 nativeScaleiOS 8 中的属性 但文档没有提及它 property nonatomic readonly CGFloat nativeScale 还有一个scale属性 但文档说它是 2 用于视网膜显
  • iOS UIButton 带有圆角和背景 bug

    我发现圆形 UIButton 存在一个奇怪的问题 这是我创建此按钮的代码块 let roundedButton UIButton type System roundedButton frame CGRectMake 100 100 100
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 如何使用 Swift 获取 YouTube 频道的所有播放列表?

    我的问题不是关于从一般频道检索视频 我只想获取该频道创建的所有 播放列表 并检索每个播放列表的缩略图 标题和视频数量 这是一个 YouTube 频道示例 正如您所看到的 有很多已创建的播放列表 截至目前 我只能获取某个频道最新上传的视频 在
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 如何将音乐从我的应用程序切换到 iPod

    我在用MusicPlayerController我的应用程序中的对象来播放音乐 我知道当 iPhone ipod 应用程序终止时 可以继续播放我的应用程序音乐 我该怎么做 这涉及到一些事情 您必须在两种音乐播放器之间进行选择 应用程序音乐播
  • 如何更改已上传的 Firebase 存储图像文件名?

    我需要更改已上传到 firebase 存储中的文件名 因为 在 firebase 存储中上传图像后 我将 url 保存在 firebase 数据库中的特定子 文件夹 下 但是 当我将图像移动到另一个子 文件夹 时 我需要根据新名称更改存储中
  • 自定义 MKAnnotationView - 如何捕获触摸而不忽略标注?

    我有一个自定义 MKAnnotationView 子类 它完全按照我想要的方式显示视图 在那个视图中 我有一个按钮 我想捕获按钮上的事件来执行操作 这很好用 但是 我不希望标注被忽略或消失 基本上 触摸标注中的按钮将开始播放声音 但我想保留
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • 使用 Storyboard 时获取 NSManagedObjectContext

    目标是获取当前的 NSManagedObjectContext 以便使用 Core Data 在 iOS 4 3 中 我将 UINavigationController 的委托设置为 AppDelegate 如下所示 在 AppDelega
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • ResponseSerializer“无法使用 Swift 3 调用非函数类型“NSHTTPURLResponse”的值?

    我一直在使用以下代码 没有出现任何问题 直到更新到 Xcode 8 beta 6 它类似于这个例子 https github com Alamofire Alamofire generic response object serializa

随机推荐

  • 新表达式的模板参数推导失败

    我正在开发一个可变参数类模板 但如果不指定模板参数 我就无法将它与新表达式一起使用 我不想 我将问题简化为以下代码示例 template
  • dp是基于屏幕的物理尺寸吗? (dp = 1/160 英寸)

    这个定义正确吗 dp 与密度无关的像素 1 160 英寸 基于屏幕的物理尺寸 我发现了相互矛盾的信息 官方文档假设按比例缩放在等式 px dp dpi 160 中 还here 3 02 罗曼 努里克说 按比例缩放 但在官方文档中 px 像素
  • 在 Perl 中遍历多维哈希

    如果 Perl 中有一个具有多个维度的散列 或对散列的引用 并且您想要迭代所有值 那么最好的方法是什么 换句话说 如果我们有 f gt x y 我想要类似的东西 foreach x y deep keys f 代替 foreach x ke
  • 连接到多个 mongo db 主机并在 Spring Boot 中使用不同的数据库进行身份验证

    我有一个与 mongo db 集成的 java 应用程序 我碰巧有 3 个 mongo 数据库主机 均具有相同的端口 并且必须使用除我的应用程序使用的数据库之外的单独数据库对它们进行身份验证 例如 admin 是身份验证数据库名称 cont
  • Visual Studio 2010 Professional 中的 C# 模式

    在配置刚刚安装的 Visual Studio 2010 Professional 时 我错误地选择了 Visual Basic 模式 我想更正我的选择并将其更改为 C 我怎样才能做到这一点 工具 gt 导入和导出设置 gt 重置所有设置 g
  • 词典内部是如何维护的?

    当我说 Dictionary
  • 如何将数据标签添加到seaborn countplot / Factorplot [重复]

    这个问题在这里已经有答案了 我使用 python3 seaborn countplot 我的问题 如何为每个柱添加计数值 显示顶部的标签 每个酒吧 如何让这些条按降序排列 我写了这个 fig plt figure figsize 10 6
  • 在 Perl 中迭代哈希中的哈希数组

    我的哈希中有一个哈希数组 如下所示 VAR1 file gt pathname gt out log size gt 51 name gt out log time gt 1345799296 pathname gt test pl
  • Sublime text3 和 virtualenvs

    我有不同的virtualenv的 用virtualenwrapper 并且我希望能够指定哪个virtualenv与每个项目一起使用 由于我正在使用SublimeREPL用于自定义构建的插件 如何指定使用哪个 python 安装来构建我的项目
  • WebView - 如果不请求两次就无法下载文件?

    如果我听DownloadListener 我得到了我需要请求的URL在浏览器已经请求之后 浏览器已经打开了到该 URL 的连接 这就是它知道这是下载的原因 为什么它不能向我传递该连接 我也尝试分配一个自定义WebViewClient to
  • 在字符串中的特定位置插入字符

    我想在字符串中的特定位置插入额外的字符 或新字符串 例如我想插入d在第四个位置abcefg to get abcdefg 现在我正在使用 old lt abcefg n lt 4 paste substr old 1 n 1 d subst
  • 如何使用 XML 通过 Spring Security Oauth2 启用 /oauth/check_token

    我已经使用 spring security 3 2 和 javaconfig 成功启用了 oauth check token 端点 但目前我仅限于 spring security 3 1 4 然后我坚持使用 XML 配置 oauth tok
  • 如何选取质数来计算哈希码?

    这个问题是根据乔恩 斯基特 Jon Skeet 对这个问题给出的答案而来的 重写 System Object GetHashCode 的最佳算法是什么 为了计算哈希码 使用以下算法 public override int GetHashCo
  • Python 同步 stdout 和 stderr 输出

    使用以下代码 import sys print INFO flush True file sys stdout print ERROR flush True file sys stderr 有时输出是 ERROR INFO 有时 INFO
  • 访问 Roslyn REPL 中的 .config 文件

    使用罗斯林 2012 年 6 月 CTP 有没有办法为 Roslyn C Interactive REPL 提供正在探索的代码的 config 文件 一个简单的示例场景是依赖于通常从 app config web config 获取的连接字
  • glUniformBlockBinding 的用途是什么?

    假设我有一个索引处带有 UniformBlock 的着色器程序0 绑定 UniformBuffer 以下显然足以将 UniformBuffer 绑定到块 glUseProgram program glBindBuffer GL UNIFOR
  • MySQL 异常处理程序正在处理访问异常

    我试图发生错误时回滚 但仍然让客户端接收到错误 这实际上可能是不可能的 除非有一种方法可以访问异常处理程序中的错误 可以从异常中 抛出 即可以发出信号 CREATE PROCEDURE p BEGIN DECLARE EXIT HANDLE
  • 聚集和非聚集索引性能

    我有一个巨大的表 约 1000 万行 在随机的 uniqueidentifier 列上有集群 PK 我对此表执行的最多操作是如果尚不存在具有相同 pk 的行 则插入新行 为了提高它的性能 我使用 IGNORE DUP KEY ON 选项 我
  • 如何在 C# 中消息框关闭后强制按钮、文本框在表单上重新绘制

    我有一个带有按钮 文本框和用户控件的表单 单击按钮时 它会调用另一个类中的方法 在此类中 将打开一个消息框 当用户单击 确定 时 消息框将关闭 类方法将持续 10 秒左右 然后结束 在这 10 秒内 消息框结束后的任何文本框或按钮仍然显示消
  • 将 UIView 图层转换为 UIImage

    我正在视图中使用 AVPlayerLayer 播放视频 我需要将视图转换为图像 我尝试过 myview layer renderInContext context 但这只给出黑色图像 我想将当时的视图转换为带有视频的图像 这个转换会同时发生