2012-02-25 16 views
11

Bir CALayer'a resim çizmem gerekiyor çünkü üzerinde çeşitli efektler, animasyonlar ve filtreler gerçekleştirmem gerekiyor. Ne yapıyorum olursa olsun CGContext'e basit çizim yaptığımda her zaman piksellenmiş çizilir ... Retina'da bir bağlam üzerine çizmenin doğru yolu nedir?CGContextDrawImage görüntü pikselli çizer?

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

cevap

18

Sen uygun katmanın içeriği ölçeğini ayarlamak gerekir:

Şu ana yapıyorum budur.

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

Aaaaaa! CG doc'larda her yere bakıyordum - bir dakika düşünmüyordum, bu bir katman sorunuydu! Teşekkür ederim! – shein

+0

Harika. Teşekkür ederim. – darkheartfelt

23

Aynı sorun vardı ama çözüm işe yaramadı. Sorunumun neden olduğu ortaya çıktı. Çözümü, aynı sorunla gelecekteki kullanıcılar için buraya gönderiyorum.

iOS 4.0 itibaren kullanmalıdır:

UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 

yerine

UIGraphicsBeginImageContext(size); 

size pikselli görüntüler istemiyorsanız.

+0

Teşekkürler! Bunun neden işe yaradığını anlayamıyorum, ama öyle. – anonymouse

+2

Doğru cevap bu olmalı! – Fydo

+2

Bunu kabul edilen yanıtla birleştiren en iyi sonuçları aldığımı belirterek dikkat: 'UIGraphicsBeginImageContextWithOptions (imageSize, NO, [UIScreen mainScreen] .scale);' – bplattenburg

İlgili konular