加快保存图像的速度 - iOS

2024-04-17

我正在研究更多的小型项目,这些项目稍后将包含在一个新项目中。它基本上是一个测试单元。

我正在做的是创建一个AVCaptureSession然后创建一个方法OutputSampleBufferDelegate。在该方法中,我将sampleBuffer into a UIImage并保存UIImage。当我在 iPhone 4 上运行该应用程序时,它每秒只能保存 2-3 张图像。必须有一种更有效的方法来保存图像。

有人可以帮我加快速度吗?

Thanks!

很多代码都来自这里 http://developer.apple.com/library/ios/#qa/qa1702/_index.html

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{   
    UIImage *resultUIImage = [self imageFromSampleBuffer:sampleBuffer];

    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(resultUIImage)];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *path = [paths objectAtIndex:0];

    CMTime frameTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);

    NSString *filename =  [NSString stringWithFormat:@"%f.png", CMTimeGetSeconds(frameTime)];

    NSString *finalPath = [path stringByAppendingString:filename];

    [imageData writeToFile:finalPath atomically:YES];
}

// Create a UIImage from sample buffer data
- (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer 
{
    // Get a CMSampleBuffer's Core Video image buffer for the media data
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
    // Lock the base address of the pixel buffer
    CVPixelBufferLockBaseAddress(imageBuffer, 0); 

    // Get the number of bytes per row for the pixel buffer
    void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); 

    // Get the number of bytes per row for the pixel buffer
    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
    // Get the pixel buffer width and height
    size_t width = CVPixelBufferGetWidth(imageBuffer); 
    size_t height = CVPixelBufferGetHeight(imageBuffer); 

    // Create a device-dependent RGB color space
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    // Create a bitmap graphics context with the sample buffer data
    CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 
    // Create a Quartz image from the pixel data in the bitmap graphics context
    CGImageRef quartzImage = CGBitmapContextCreateImage(context); 
    // Unlock the pixel buffer
    CVPixelBufferUnlockBaseAddress(imageBuffer,0);

    // Free up the context and color space
    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace);

    // Create an image object from the Quartz image
    UIImage *image = [UIImage imageWithCGImage:quartzImage];

    // Release the Quartz image
    CGImageRelease(quartzImage);

    return image;
}

使用此代码,我可以将图像保存时间缩短至 0.1 秒。

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection 
{  

    double frameTime = CFAbsoluteTimeGetCurrent();
    UIImage *resultUIImage = [self imageFromSampleBuffer:sampleBuffer];

    // takes freaking forever to do.
    double pre = CFAbsoluteTimeGetCurrent();
    NSData *imageData = UIImageJPEGRepresentation(resultUIImage, 0.9);
    NSLog(@"It took to write the file:%f",CFAbsoluteTimeGetCurrent()-pre);

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory
                                                         ,NSUserDomainMask
                                                         , YES);
    NSString *path = [paths objectAtIndex:0];
    NSString *filename =  [NSString stringWithFormat:@"%f.png", frameTime];
    NSString *finalPath = [path stringByAppendingString:filename];
    [imageData writeToFile:finalPath atomically:YES];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加快保存图像的速度 - iOS 的相关文章

  • 旋转时键盘隐藏

    我正在开发 iPad 应用程序 在其中一个视图中 我有一个子视图 它在按钮点击事件时出现和消失 子视图包含一个UITextView 默认情况下 我将其设置为第一响应者 以便在视图出现时键盘立即出现 子视图也会消失UIKeyboardWill
  • 如何在收到一定数量的数据后调用 Web 服务并将其加载到表视图中

    我正在开发一个项目 在该项目中 首先调用 Web 服务 我们会获取大约 20 个数据 我们将这些数据加载到表视图中 一旦我们开始向上滚动查看视图 当它达到 20 个数时 我们需要为接下来的 20 个数调用服务 就像 Facebook 所做的
  • 如何在使用图像创建视频时添加图像变化动画

    我有一组图像 我想通过按顺序播放这些图像来创建视频 我想在图像发生变化时添加不同类型的动画 建议我一些方法或任何解决方案来通过 Cocoa 框架在 Objective C 中实现此功能 这是制作图像视频的工作代码 但请建议我们在制作视频时如
  • 在 Cocoa 中声明对象时,我应该将它们设置为 nil 吗?

    假设我想创建一个实例NSString 根据另一个变量的值初始化为某个值 通常情况下 我会这样做 NSString string if foo 1 string Foo is one else string Foo is not one 然而
  • 无法在动画块内更改隐藏属性

    我在 UIStackView 中嵌入了两个 UILabel 顶部标签始终可见 但底部标签可通过hidden财产 我希望这个效果是动画的 所以我把它放在一个动画块中 private func toggleResultLabel value D
  • 在 iOS 的 swift 中使用纯文本(Android 格式)创建属性字符串

    我正在从 Localized strings 中读取字符串 其中包含类似的内容 这基本上就是 Android 应用程序的 strings xml 中的内容 testShort A b short b ntest with another b
  • iOS 6 调试控制台不见了?

    当我进行故障排除时 我曾经使用移动 Safari 的 调试控制台 来打印 console log 消息 在 iOS 6 中 Safari 的高级设置中 Web 检查器 取代了 调试控制台 不幸的是 我的公司不允许我将我们正在测试的手机插入我
  • JavaScript 中工厂函数与构造函数的性能比较

    所以 当我们有一个简单的构造函数时 function Vec x y this x x this y y 还有一个工厂类似物 function VecFactory x y return x x y y 性能具有可比性 100000000
  • iOS SDK - 在蒙版图像上添加阴影

    如何在上面添加阴影UIImageView哪个有蒙版图像 我不是指矩形阴影 我也想对阴影应用相同的遮罩效果 给 UIImageView 提供阴影效果尝试下面的代码 1 import
  • Objective-C 复制视图

    所以我在这里有一个简短的问题 我有一个视图控制器对象的实例 让我们调用它viewCon1 并且它上面放置了几个子视图 每个子视图都具有独特的属性 让我们称呼他们吧sub1 sub2 and sub3 现在 我以编程方式添加每个子视图 执行以
  • 如何使 Raspberry Pi 3 可被 iOS 和 CoreBluetooth 发现?

    我有一个 Raspberry Pi 3 我正在尝试使其可供 iOS 设备发现 我跑了sudo hciconfig hci0 piscan让它被发现 我可以用我的 iMac 看到它 在 iOS 上 我使用 CoreBluetooth 并扫描附
  • 在用户提交的正则表达式中查找捕获组

    我有一个 python 应用程序 需要处理用户提交的正则表达式 出于性能考虑 我想禁止捕获组和反向引用 我的想法是使用另一个正则表达式来验证用户提交的正则表达式不包含任何命名或未命名的组捕获 如下所示 def validate user r
  • 从 UIButton 调用类外部的函数

    我有一个函数 我想在按下按钮时调用它 但与我迄今为止所做的任何事情不同 我希望能够从多个 ViewController 中的任何一个访问它 我不想在每个 ViewController 中重复相同的代码块 我尝试在 ViewControlle
  • 如何在 Octave 中有效地从 csv 读取大矩阵

    有很多关于 Octave 性能缓慢的报告dlmread 我希望这个问题在 3 2 4 中得到修复 但是当我尝试加载大小为 ca 的 csv 文件时 8 4百万 总共32百万 也花了非常非常长的时间 我在网上搜索但找不到解决此问题的方法 有人
  • 构建复杂 NSCompoundPredicate 的最佳方法是什么?

    我需要建立一个NSPredicate有很多数据 例如 在 SQL 中我会执行如下操作 SELECT FROM TRANSACTIONS WHERE CATEGORY IN categoryList AND LOCATION IN locat
  • 如何在半屏上呈现 ViewController

    我有一个UIViewController其中只有一个UIView从底部覆盖了 viewController 的 1 3 像这样 我想在另一个 ViewController 上呈现这个 viewController 它应该从底部动画显示 并且
  • 如何加速Python循环

    我查看了几个网站上的一些讨论 但没有一个给我解决方案 这段代码运行时间超过5秒 for i in xrange 100000000 pass 我正在研究整数优化问题 我必须使用O n log n 算法编辑 O n 4 算法 其中n代表矩阵的
  • 是否包括触摸事件客户端X/Y 滚动?

    我正在尝试获取相对于的触摸坐标viewport来自触摸事件的浏览器 例如触摸启动 我尝试从 clientX Y 属性获取它们 但两者实际上都返回包括滚动在内的值 这是违反规范的 因为它说 clientX Y 应该返回坐标而不滚动 我尝试添加
  • 如何检测 OS X 上是否按下了某个键?

    我正在为 OSX 编写 Spritekit 游戏 如何检查当前是否按下某个键 考虑这个例子 some code this could be e g inside a game loop if is key w pressed move fo
  • iPhone 指南针显示特定位置

    我是 Objective c 的新手 所以如果我的问题太垃圾 我想道歉 我正在编写一个指南针 但它正在工作 感谢教程 给出了实际位置 经度和纬度 指南针内的箭头是否有可能向我显示到特定位置 经度2和纬度2 的方向 我读到我必须考虑 iPho

随机推荐

  • jQuery 使用什么正则表达式进行电子邮件验证?

    Jquery 可以验证电子邮件地址 http docs jquery com Plugins Validation http docs jquery com Plugins Validation jQuery 使用什么正则表达式 如果有 进
  • 直接通过 SSH 进入 docker 容器

    我有一些 docker 容器 现在我想通过 ssh 访问其中一个 这是工作我通过 ssh 连接到 docker 容器 但现在我遇到的问题是我不知道哪个用户可以访问这个容器 我已经对主机上的两个用户 网络和根 进行了尝试 但它们不起作用 知道
  • 如何使用 exec() 启动和停止 PHP 开发服务器

    如何使用 exec 函数启动和停止 PHP 开发服务器 我需要这样做才能自动化我的 BDD 测试 这将停止我的脚本的执行 echo exec php S localhost 8000 所以我需要一种方法从 PHP 启动服务器并能够继续执行我
  • 实体框架中的第二个 Self-To-Self 关系

    假设我们有一个域类 public class Incident Key public virtual int IncidentId get set Display Name Parent Incident public virtual In
  • 当我使用非共享运行时构建 Monodroid 项目时,获取编码失败

    我正在尝试在我的 Monodroid 应用程序中使用 DotNetZip 库 当我启用共享运行时构建选项时 一切似乎都工作正常 当我禁用共享运行时时 该行 static System Text Encoding ibm437 System
  • Angular 5 反应形式 - 单选按钮组

    我有 2 个单选按钮 我正在使用反应式表单 并且我已在组件中添加了表单控件 我面临的问题是 name 属性必须与 formControlName 相同 当我将名称属性设置为相同时 我只能选择 1 个单选按钮 永远无法取消选择并选择另一个 只
  • Flutter 出现 The method 'findRenderObject' was called on null

    最近有一个需求 需要测量条子里的子元素到顶部的距离 但是总是提示findrendereobject为空 我什至无法尝试 widgetsbinding instance addpostframecallback控制台错误 调度程序库捕获异常
  • 在 RxJava 2 中展平列表

    我已经使用 RxJava 1 一段时间了 但我想看看 RxJava 2 在 RxJava 1 中 我可以发出列表中的每个项目 如下所示 List
  • Spring MVC JSP 无法定位 Javascript 或 CSS

    这个问题似乎已经被问过几次了 但是在审查了太多次之后 我仍然看到这个问题 我的 Spring MVC 项目中的 jsp 无法找到任何 css 或 js 文件 即使它们在战争中并且给定的文件路径是正确的 根据我的配置 我看到两个错误 第一个是
  • 独立的 Visual Studio Code 工作区,针对不同的编程语言具有不同的扩展

    是否可以使用扩展分别创建不同的 Visual Studio Code 工作区 例如 工作区 1带有 C 扩展和工作区 2带有Python扩展 您可以安装扩展 然后在特定工作区上启用 禁用它们 打开工作区 在 扩展 面板中 单击每个扩展的齿轮
  • 在.VS 2015 NET 4.5中使用字符串插值和nameof

    我正在使用类似的东西 hello person and nameof arg1 在我的代码中 但在检查项目属性时 我的目标是 NET 4 5 这个可以吗 我以为这些东西是4 6引入的 该项目在我的机器上构建并运行良好 但我担心部署时会出现问
  • C# 中“decimal”类型的有趣行为

    如果我们将填充声明为 const 小数 则填充不起作用 mymoney 1 2 而你的钱 1 20 如何解释这种行为 class Program static void Main string args decimal balance 1
  • sklearn - 如何在one-hot编码时合并丢失的数据

    我试图保留数据集中包含缺失数据的行 当使用 sklearn 对一列 或多列 进行 one hot 编码时 是否可以写一个规则if currentItem null or if currentItem 0然后将输出数组设置为全0 e g A
  • 反对网站开发公司使用 JavaScript 框架的理由是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们公司构建网站和网络应用程序 我们是一家小公司 我们的开发团队总是从头开始构建 JavaScript 函数 或者从我们构建的其他网站复制 每当
  • 数组中每个索引的函数调用之间的javascript延迟[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 目标 对数组中的每个元素执行逻辑 W
  • Highcharts - 图表回流功能的问题

    这是fiddle http jsfiddle net uBUv9 6 我有问题width图表与切换侧边栏 我在SO的帮助下解决了这个问题post https stackoverflow com questions 23602167 issu
  • 使用 Azure Devops API 创建构建定义

    我们尝试使用 Azure Devops Rest API 复制另一个构建定义信息来创建构建定义 但出现以下错误 HttpError BadRequest 值不能为空 参数名称 定义 Repository Mappings Mapping S
  • 使用acts_as_paranoid插件进行软删除-验证怎么样?

    我正在尝试使用acts as paranoid 插件来软删除记录 我之前使用数据库中的标志来管理它 我知道这个插件会从搜索中省略一条记录 并查找该记录是否被软删除 我想知道的是我是否在模型中进行了验证 例如validates uniquen
  • 处理 Kafka Broker 宕机时的故障

    我有一个 Kafka 代理正在运行 消息已成功消费 但我想处理 Kafka 代理在 Kafka 消费者端出现故障的情况 我读过了this https github com spring projects spring kafka issue
  • 加快保存图像的速度 - iOS

    我正在研究更多的小型项目 这些项目稍后将包含在一个新项目中 它基本上是一个测试单元 我正在做的是创建一个AVCaptureSession然后创建一个方法OutputSampleBufferDelegate 在该方法中 我将sampleBuf