2012-02-25 15 views
11

Potrzebuję narysować obrazy w CALayerze, ponieważ muszę wykonywać na nim różne efekty, animacje i filtry. Kiedy robię proste rysowanie w CGContext bez względu na to, co robię, zawsze rysuje się w pikselach ... Jaki jest właściwy sposób na przyciągnięcie do kontekstu w siatkówce?CGContextDrawImage w siatkówce rysuje piksele obrazu?

To, co robię teraz:

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); 

Odpowiedz

18

Musisz ustawić Skalowanie zawartości warstwy odpowiednio.

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

Aaaaa! Szukałem wszędzie w dokumentach CG - nie myślałem przez chwilę, że to kwestia warstwy! Dziękuję Ci! – shein

+0

Niesamowite. Dziękuję Ci. – darkheartfelt

23

Miałem ten sam problem, ale rozwiązanie nie działało.

okazało się być przyczyną mojego problemu. Zamieszczam tutaj moje rozwiązanie dla przyszłych użytkowników z tym samym problemem.

Od iOS 4.0 należy użyć:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

zamiast

UIGraphicsBeginImageContext(size); 

Jeśli nie chcesz piksele obrazu.

+0

Dziękujemy! Nie mogę powiedzieć, że rozumiem, dlaczego to działa, ale tak jest. – anonymouse

+2

To powinna być właściwa odpowiedź! – Fydo

+2

Warto zauważyć, że miałem najlepsze wyniki, łącząc to z zaakceptowaną odpowiedzią: 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);' – bplattenburg

Powiązane problemy