2010-08-23 19 views
6

Ben boşuna hiçbir yere baktım. Bir iş parçacığında bazı görüntü yükleme yapıyorum ve UIKit iş parçacığı güvenli değil çünkü görüntüleri CGImageRefs olarak saklamak zorundayım ama bunu nasıl yapacağımı anlayamıyorum. Daha önce hiç Quartz ile oynamadım, bu yüzden kafamı karıştırıyor. Temel olarak sadece bir JPG'yi diskten bir CGImageRef'e yüklemeliyim. Ayrıca bonus puanları için, bir CGGGGG'ye bir GIF yüklemek için var mı?Tam olarak diskteki bir görüntüden bir CGImageRef yapmak nasıl

cevap

28

gcamp az ya da çok doğru olduğunu, bir arka plan iş parçacığı üzerinde bu kullanmak için ancak soruya cevap vermek oldukça güvenli, aşağıdaki çalışma olduğuna inanıyorum.

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

jpg görüntüleri, CGImageCreateWithJPEGDataProvider bir fonksiyonu da vardır

.

8

UIKit'i kullanmanın ve CGImageUIImage'un uygunluğunu kullanmanın en basit yol olduğunu düşünüyorum. Böyle

şey:

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

Okay (Bittiğinde veri sağlayıcı ve görüntü serbest bırakmak için emin olun) ama mesele bu dizisindeki oluyor ve UIKit parçacığı güvenli değil. Aksi halde UIImage'ı geri gönderirim. Bir dosyadan bir görüntüyü okuyabilmem ve doğrudan bunun için bir CGImageRef oluşturmam gerekiyor. – Alexander

+0

Ne yazık ki O.P., Apple'ın "Tüm UIKit nesneleri sadece ana iş parçacığında kullanılmalıdır" yazıyor. –

+0

Yanılmıyorsam, UI güncellemeleri ana iş parçacığı üzerinde yapılmalıdır. UIKit'in diğer kısımları aslında vidalıdır. – gcamp

İlgili konular