到目前为止,我已经成功地创建用于iPhone的应用程序,需要多个图像,每个约3秒的时间间隔。 我真的处理在一个单独的线程异步每个图像和一切都很好,直到它到达时刻保存在iPhone盘上的图像。 然后,它需要大约12秒,将图像保存到使用JPEG表示磁盘。
苹果是怎么做到的,他们怎么设法保存单个图像如此之快的磁盘有他们使用了一招? 我看到了动画转移用户了一会儿,但还是需要的时间低于12秒!
提前致谢。
到目前为止,我已经成功地创建用于iPhone的应用程序,需要多个图像,每个约3秒的时间间隔。 我真的处理在一个单独的线程异步每个图像和一切都很好,直到它到达时刻保存在iPhone盘上的图像。 然后,它需要大约12秒,将图像保存到使用JPEG表示磁盘。
苹果是怎么做到的,他们怎么设法保存单个图像如此之快的磁盘有他们使用了一招? 我看到了动画转移用户了一会儿,但还是需要的时间低于12秒!
提前致谢。
我还没有试过,但我不会这么肯定,苹果没有使用相同的方法。 苹果的设计理念的一个重要组成部分依赖于从用户隐藏运行中断。 苹果的代码可能需要尽可能多的时间你的,但仅仅是在隐藏整个节省时间,从用户的感知熟练。
如果有人不能告诉你苹果如何实际上并保存更快,我建议在想方设法掩盖了节省时间。
其实苹果利用其籽粒司机AppleJPEGDriver,这是一个硬件JPEG编码API和比软件编码(JPEGRepresnetaion)和一些在他们的越狱应用程序(cycorder视频录制应用程序),使用它的人快得多。 苹果公司应该给予同样的功能,它的用户,但他们是苹果:)
如果谷歌张望了一下......还有的人用同样的问题一大堆。
我没有找到答案。 总的结论似乎是,苹果要么使用一些内部API和旁路公共API开销或某些硬件编码器。
想你的运气了快速保存图像
我有我的应用程序这一问题,对储蓄会挂,所以我用大中央调度。
下面是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;
}