2010-10-10 2 views
7

Я хочу масштабировать UIImage таким образом, чтобы пользователь мог видеть пиксели в UIImage очень острыми. Когда я помещал это в UIImageView и масштабировал матрицу преобразования, UIImage выглядит сглаженным и сглаженным.Как увеличить UIImage без сглаживания чего-либо?

Есть ли способ визуализации в большем контексте растрового изображения, просто повторяя каждую строку и каждый столбец, чтобы получить больше пикселей? Как я мог это сделать?

+0

Что ваш коэффициент масштабирования? Имейте в виду, что только для x2, x3, x4 и т. Д. Вы можете ожидать получения «острых» результатов. – Eiko

+1

Обратите внимание, что этот метод известен как интерполяция ближайшего соседа. – BoltClock

ответ

20

#import <QuartzCore/CALayer.h>

view.layer.magnificationFilter = kCAFilterNearest

+3

Обратите внимание, что это не работает, если вы создали UIImage для UIImageView с помощью [UIImage imageWithCIImage: ci]; – marcelnijman

+2

Кроме того, используйте 'view.layer.shouldRasterize = YES'. Это делается для того, чтобы избежать проблемы, когда некоторые изображения показывают 4 пикселя для каждого пикселя. –

+0

@PeterDeWeese, это здорово и достигает моей цели, но я хочу спросить, когда я использую 'magnificationFilter = kCAFilterNearest', большие и острые пиксели на самом деле увеличивают исходные пиксели изображения или просто производятся какой-то обработкой? ! – Suge

2

При рисовании непосредственно в контексте растрового изображения, мы можем использовать:

CGContextSetInterpolationQuality(myBitmapContext, kCGInterpolationNone); 

Я нашел это на CGContextDrawImage very slow on iPhone 4

+0

Это ответ, который я искал !!! – fpg1503

1

Я также пытался это (на подслой), и я не мог заставить его работать, он все еще был расплывчатым. Это то, что я должен был сделать:

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

Спасибо за драйв by downvotes ... ум объясняет, в чем проблема с этим ответом? – Eliot

-1

Для UIImage создан из CIImage вы можете использовать:

imageView.image = UIImage(CIImage: ciImage.imageByApplyingTransform(CGAffineTransformMakeScale(kScale, kScale))) 
Смежные вопросы