大佬教程收集整理的这篇文章主要介绍了objective-c – 加速保存图像 – iOS,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做的是创建一个AVCaptureSession,然后为OutputSampleBufferDelegate创建一个方法.在该方法中,我将sampleBuffer转换为UIImage并保存UIImage.当我在iPhone 4上运行应用程序时,它每秒只能保存2-3张图像.必须有一种更有效的方法来保存图像.
有人可以帮助我加快速度吗?
谢谢!
- (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; }
- (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,YES); NSString *path = [paths objectATindex:0]; NSString *filename = [NSString StringWithFormat:@"%f.png",frameTime]; NSString *finalPath = [path StringByAppendingString:filename]; [imageData writeToFile:finalPath atomically:YES]; }
以上是大佬教程为你收集整理的objective-c – 加速保存图像 – iOS全部内容,希望文章能够帮你解决objective-c – 加速保存图像 – iOS所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。