2012-09-20 4 views
1

UIGraphicsBeginImageContext을 호출 한 후 나중에 1/25 초마다 이미지를 전달하는 백그라운드 스레드에서 사용하려면 CGContextRef을 저장하고 싶습니다.UIGraphicsBeginImageContext를 호출 한 후 어떻게 CGContextRef를 저장할 수 있습니까?

배경 스레드에서 호출 할 때마다 UIGraphicsBeginImageContext을 사용할 때 직면하는 문제는 컨텍스트를 만드는 데 시간이 걸리고 1/25 초마다 이미지를 그릴 수 없다는 것입니다.

나는 CGBitmapContextCreate를 사용하여 시도하지만 난 내가 viewDidLoadUIGraphicsBeginImageContext를 호출 시도 UIGraphicsBeginImageContext()-->[image drawInRect]

만든 그 같은 이미지 품질을 얻을 해달라고하고 그래서 내가 나중에 전화 만 문맥에서 사용할 수 있습니다 직후 CGContextRef을 저장 어떻게 든 발표되고 그래서 나는 [image drawInRect] 을 호출 한 직후에 "CGContextDrawImage: invalid context 0x0"오류가 발생하고 UIGraphicsGetImageFromCurrentImageContext()에서 얻은 이미지는 null이됩니다.

단일 이미지 컨텍스트를 응용 프로그램의 수명 기간 동안 사용할 수 있습니까? 그렇다면 어떻게? 또는 내 컨텍스트를 저장할 다른 옵션이 있는지 알려주십시오.

답변

0

먼저, 한 스레드에서 그래픽 컨텍스트를 만든 다음 다른 스레드로 전달하는 것은 혼란 스럽습니다. 배경 스레드에서 그래픽 컨텍스트를 처음 만들면됩니다.

두 번째로 UIGraphicsBeginImageContext이 UIKit의 그래픽 컨텍스트 스택을 조작하기 때문에 나중에 UIGraphicsEndImageContext을 호출 한 후 CGContext을 만들고 사용하는 것을 혼란스럽게합니다. CGContextRef을 보유하면 작동 할 수 있습니다. 나는 그것을 시도하지 않았다.

코어 그래픽 API를 직접 사용하면됩니다. CGBitmapContextCreate을 사용하여 컨텍스트를 만들고 CGBitmapContextCreateImage을 사용하여 CGImage을 얻은 다음 +[UIImage imageWithCGImage:]을 사용하여 CGImageUIImage으로 변환하십시오.

+0

동일한 스레드에서 CGBitmapContextCreateImage를 사용하는 것에 대해 동의합니다. 이게 내가 한 짓이야! 하지만이 방법의 문제점은 컨텍스트에서 CGContextDrawImage를 호출 할 때 발생합니다. 이미지를 거꾸로 그립니다. 색상이 잘못되었습니다. S –

관련 문제