2010-10-10 17 views
7

UIImage'ı, kullanıcı UIImage'daki pikselleri çok keskin bir şekilde görebilecek şekilde ölçeklemek istiyorum. Bunu bir UIImageView'a koyduğumda ve dönüştürme matrisini ölçeklediğimde, UIImage antialiased ve smoothed olarak görünür.Bir UIImage'ı herhangi bir pürüzsüzleştirme olmadan nasıl ölçeklendirirsiniz?

Daha büyük pikseller elde etmek için her satırı ve her sütunu tekrarlayarak daha büyük bir bitmap bağlamında işlem yapmanın bir yolu var mı? Bunu nasıl yapabilirim?

+0

sizin ölçek faktörü nedir? Sadece x2, x3, x4 vb. Için "keskin" sonuçlar almayı bekleyebilirsiniz. – Eiko

+1

Bu yöntemin en yakın komşu enterpolasyonu olarak bilinir. – BoltClock

cevap

20

#import <QuartzCore/CALayer.h>

view.layer.magnificationFilter = kCAFilterNearest

+3

UIImageView için UIImageView öğesini [UIImage imageWithCIImage: ci] ile oluşturduysanız bu çalışmaz. – marcelnijman

+2

ek olarak, 'view.layer.shouldRasterize = YES' işlevini kullanın. Bu, bazı görüntülerin her piksel için 4 piksel gösterdiği sorunu önlemek içindir. –

+0

@PeterDeWeese, Bu harika ve amaca ulaşıyor, ama sormak istiyorum, 'magnificationFilter = kCAFilterNearest' kullandığımda, görüntünün orijinal piksellerini gerçekten büyüten büyük veya keskin pikseller mi, yoksa sadece bazı işlemler tarafından üretiliyor mu? Teşekkürler ! – Suge

1

üzerinde buldum) ve çalışamadım, hala bulanıktı. Bu yapmam gereken şudur: UIImage için

const CGFloat PIXEL_SCALE = 2; 
layer.magnificationFilter = kCAFilterNearest; //Nearest neighbor texture filtering 
layer.transform = CATransform3DMakeScale(PIXEL_SCALE, PIXEL_SCALE, 1); //Scale layer up 
//Rasterize w/ sufficient resolution to show sharp pixels 
layer.shouldRasterize = YES; 
layer.rasterizationScale = PIXEL_SCALE; 
+0

Sürüklenme notları için teşekkürler ... bu sorunun cevabını açıklayan zihin mi? – Eliot

-1

CIImage oluşturulan aşağıdakileri kullanabilirsiniz:

imageView.image = UIImage(CIImage: ciImage.imageByApplyingTransform(CGAffineTransformMakeScale(kScale, kScale))) 
İlgili konular