将 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 的相关文章

随机推荐

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

    我正在开发一个可变参数类模板 但如果不指定模板参数 我就无法将它与新表达式一起使用 我不想 我将问题简化为以下代码示例 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 但这只给出黑色图像 我想将当时的视图转换为带有视频的图像 这个转换会同时发生