2012-02-25 3 views
11

다양한 효과, 애니메이션 및 필터를 수행해야하므로 CALayer에 이미지를 그려야합니다. CGContext에 간단한 드로잉을 할 때, 나는 항상 그려진 픽셀을 얻습니다. 망막의 컨텍스트에 어떻게 그릴 수 있습니까?망막의 CGContextDrawImage가 픽셀 화 된 이미지를 그립니다.

CGImageRef plateImage = [[UIImage imageNamed:@"someImage"] CGImage]; 
CGFloat width = CGImageGetWidth(plateImage), height = CGImageGetHeight(plateImage); 
CGFloat scale = [[UIScreen mainScreen] scale]; 

NSLog(@"Scale: %f\nWidth: %f\nHeight: %f", scale, width, height); 
CGContextTranslateCTM(_context, 0, height/scale); 
CGContextScaleCTM(_context, 1.0, -1.0); 

CGContextDrawImage(_context, CGRectMake(0, 0, width/scale, height/scale), plateImage); 

답변

18

당신은 적절 레이어의 내용 스케일을 설정해야합니다

이것은 내가 지금 뭘하는지입니다.

myLayer.contentsScale = [UIScreen mainScreen].scale 
+0

아아아아! 나는 CG 문서에서 도처를보고 있었다. 그것은 잠깐 동안 레이어 문제가 아니라고 생각했다. 고맙습니다! – shein

+0

놀라운. 고맙습니다. – darkheartfelt

23

나는 동일한 문제가 있었지만 해결책은 제대로 작동하지 않았습니다.

UIGraphicsBeginImageContext()이 내 문제의 원인으로 밝혀졌습니다. 나는 같은 문제를 가진 미래의 사용자들을 위해 나의 해결책을 여기에 올리고있다.

iOS 4.0 버전에서 당신은 사용해야

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

대신

UIGraphicsBeginImageContext(size); 

의 당신이 픽셀 화 된 이미지를하지 않으려면.

+0

감사합니다. 나는 이것이 왜 작동하는지 이해한다고 말할 수는 없지만 그렇게한다. – anonymouse

+2

이것은 올바른 대답이어야합니다! – Fydo

+2

이 답변을 수락 된 답변과 결합하여 가장 좋은 결과를 얻었습니다. 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);' – bplattenburg

관련 문제