secuencia - porque las fotos de mi iphone no cargan
¿Cómo se las arregla la aplicación Camera Camera predeterminada para guardar una foto tan rápido? (4)
En realidad, Apple usa su controlador de kernel AppleJPEGDriver, es una api de codificación jpeg de hardware y es mucho más rápida que la codificación de software (JPEGRepresnetaion) y algunas de las personas que la usan en sus aplicaciones jailbreak (aplicación de grabación de video cycorder). Apple debería ofrecer la misma funcionalidad a sus usuarios, pero son de Apple :)
Hasta ahora he logrado crear una aplicación para iPhone que toma múltiples imágenes con un intervalo de aproximadamente 3 segundos entre cada una. Estoy procesando cada imagen en una secuencia separada de forma asincrónica y todo va bien hasta que llega el momento de guardar la imagen en el disco del iPhone. Luego, toma aproximadamente 12 segundos guardar la imagen en el disco usando la representación JPEG.
¿Cómo lo hace Apple? ¿Cómo logran guardar una sola imagen tan rápido en el disco? ¿Hay algún truco que estén usando? Vi que las animaciones distraen al usuario por un tiempo, ¡pero aún así el tiempo necesario es inferior a 12 segundos!
Gracias por adelantado.
Estaba teniendo este problema en mi aplicación, al guardarlo se colgaría, así que utilicé el despacho Grand Central.
Debajo está el método setImage de mi clase de caché de imágenes, si UIImage tiene una imagen, la guarda, de lo contrario, la elimina. Puede adaptar esto a sus necesidades con suerte, solo funcionará en iOS 4+. El código está habilitado para 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;
}
No lo he intentado pero no estoy seguro de que Apple esté usando los mismos métodos. Una gran parte de la filosofía de diseño de Apple se basa en ocultar las interrupciones operacionales del usuario. El código de Apple puede tomar tanto tiempo como el suyo, pero simplemente hábil para ocultar todo el tiempo de ahorro de la percepción del usuario.
Si alguien no puede decirte cómo Apple realmente ahorra más rápido, sugeriría buscar formas de disfrazar el tiempo de ahorro.
Si googleas un poco ... hay un montón de gente con el mismo problema.
No encontré una respuesta. La conclusión general parece ser que Apple usa alguna api interna y elude la sobrecarga pública de api o algún codificador de hardware.
Supongo que no tiene suerte para un rápido ahorro de imagen