![](/img/trans.png)
[英]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.