[英]How to save Capture image from camera in IPhone device Photo Library?
[英]How does the default Camera iPhone app manages to save a photo so fast?
到目前为止,我已经设法为iPhone创建了一个应用程序,它可以拍摄多张图像,每张图像之间的间隔约为3秒。 我在一个单独的线程中异步处理每个图像,一切都很好,直到它将图像保存在iPhone磁盘上。 然后,使用JPEG表示将图像保存到磁盘大约需要12秒。
Apple如何做到这一点,他们如何设法如此快速地将单个图像保存到磁盘上是否有他们正在使用的技巧? 我看到动画会分散用户一段时间的注意力,但仍然需要的时间低于12秒!
提前致谢。
实际上苹果使用它的内核驱动程序AppleJPEGDriver,它是一个硬件jpeg编码api,比软件编码(JPEGRepresnetaion)和一些人在他们的越狱应用程序(循环视频录制应用程序)中使用它快得多。 Apple应该为用户提供相同的功能,但他们是苹果:)
我没试过这个但是我不太确定Apple没有使用相同的方法。 Apple设计理念的一个重要部分依赖于隐藏用户的操作中断。 Apple代码可能需要花费与您相同的时间,但只是熟练地将整个保存时间从用户的感知中隐藏起来。
如果有人不能告诉你苹果实际上如何更快地保存,我会建议寻找方法来掩盖节省时间。
我在我的应用程序中遇到此问题,在保存它会挂起所以我使用Grand Central dispatch。
下面是我的图像缓存类中的setImage方法,如果UIImage有一个图像,它会保存它,否则它会删除它。 您可以根据自己的需要进行调整,只能在iOS 4+上运行。 代码启用了ARC。
-(void)setImage:(UIImage *)image{
if (image == nil){
NSLog(@"Deleting Image");
// Since we have no image let's remove the cached image if it exists
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
[[NSFileManager defaultManager] removeItemAtPath:[cachePath
stringByAppendingPathComponent:@"capturedimage.jpg"] error:nil];
});
}
else {
NSLog(@"Saving Image");
// We've got an image, let's save it to flash memory.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString *cachePath =
[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
NSData *dataObj = UIImagePNGRepresentation(image);
[dataObj writeToFile:[cachePath
stringByAppendingPathComponent:@"capturedimage.jpg"] atomically:NO];
});
}
imageCache = image;
}
如果你稍微谷歌...有一大堆人有同样的问题。
我找不到答案。 一般的结论似乎是苹果要么使用一些内部api并绕过公共api开销或一些硬件编码器。
猜猜你没有快速保存图像的运气
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.