2010-08-23 4 views
6

나는 아무 데나 쓸모없는 곳을 둘러 보았다. 스레드에서 일부 이미지 로딩을하고 UIKit이 스레드 안전하지 않기 때문에 CGImageRefs로 이미지를 저장해야하지만이 작업을 수행하는 방법을 알 수는 없습니다. 나는 그것이 나를 혼란스럽게하기 전에 어떤 석영 재료와도 연주하지 않았다. 기본적으로 디스크에서 JPG를 CGImageRef로로드하면됩니다. 또한 보너스 포인트를 위해 CGImageRef에 GIF를로드 할 수 있습니까?디스크의 이미지에서 정확하게 CGImageRef를 만드는 방법

답변

28

gcamp이 더 많거나 적은 정확, 당신은 백그라운드 스레드에서 이것을 사용하지만, 귀하의 질문에 대답하기 매우 안전합니다, 나는 다음과 같은 작업 것입니다 생각합니다.

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

JPG 이미지, CGImageCreateWithJPEGDataProvider하는 기능도 있습니다

.

8

가장 간단한 방법은 UIKit을 사용하고 CGImage 적절성 UIImage을 사용하는 것입니다. 그런

뭔가 :

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

자 (완료되면 데이터 공급자 및 이미지를 해제해야합니다)하지만 요점은,이 스레드에서 어떤 일이 일어나고되고 UIKit는 스레드로부터 안전하지 않습니다. 그렇지 않으면 나는 UIImage를 돌려 보낼 것이다. 파일에서 이미지를 읽고 직접 CGImageRef를 만들 수 있어야합니다. – Alexander

+0

불행히도 O.P.는 맞습니다. Apple은 "모든 UIKit 객체는 주 스레드에서만 사용해야합니다."라고 말합니다. –

+0

내가 실수하지 않으면 UI 업데이트가 주 스레드에서 수행되어야합니다. UIKit의 다른 부분은 실제로 스레드로부터 안전합니다. – gcamp

관련 문제