2010-08-23 28 views
6

J'ai regardé partout sans succès. Je fais du chargement d'image dans un thread et comme UIKit n'est pas thread safe, je vais devoir stocker les images sous CGImageRefs mais je n'arrive pas à comprendre comment faire. Je n'ai jamais joué avec des trucs Quartz, donc ça me déroute. Fondamentalement, j'ai juste besoin de charger un fichier JPG à partir du disque dans un CGImageRef. Pour les points bonus, y a-t-il un moyen de charger un GIF dans un CGImageRef?Comment exactement faire un CGImageRef à partir d'une image sur le disque

Répondre

28

gcamp est plus ou moins correct, vous êtes assez sûr de l'utiliser sur un fil d'arrière-plan, mais pour répondre à votre question, je crois que ce qui suit fonctionnerait.

CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename("file"); 
CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault); 

Il y a aussi une fonction pour les images jpg, CGImageCreateWithJPEGDataProvider.

(assurez-vous de libérer le fournisseur de données et de l'image lorsque vous avez terminé)

8

Je pense que la façon la plus simple est d'utiliser UIKit et d'utiliser la propriété CGImage de UIImage.

Quelque chose comme ça:

UIImage* image = [UIImage imageNamed:@"Your Image.png"]; 
CGImageRef imageRef = image.CGImage; 
+1

D'accord, mais le point est, ce qui se passe dans un fil et UIKit est pas sûre. Sinon, je renverrais juste l'UIImage. Je dois être capable de lire une image à partir d'un fichier et de créer directement un CGImageRef – Alexander

+0

Malheureusement, l'O.P. a raison, Apple dit: «Tous les objets UIKit doivent être utilisés uniquement sur le thread principal. –

+0

Si je ne me trompe pas, les mises à jour de l'interface utilisateur doivent être effectuées sur le thread principal. D'autres parties de UIKit sont en fait thread safe. – gcamp