2009-11-01 2 views
4

У меня есть UIImageView с изображением, которое больше, чем его рамка.
Он установлен, чтобы перемасштабировать изображение, чтобы оно соответствовало его раме. Но изображение масштабируется с фильтром низкого качества.Cocoa-Touch: Как установить качество интерполяции, которое будет использоваться UIImageView?

У меня read here, что это вызвано им, используя низкое качество интерполяции.

Как я могу получить его контекст от CGContextSetInterpolationQuality до kCGInterpolationHigh?

ответ

1

UIImageView не предлагает такую ​​функциональность, хотя UIImage имеет недокументированные _imageScaledToSize:interpolationQuality: метод, если я правильно помню.

Поскольку UIImageView рисует непосредственно на дисплей, подклассы и переопределение drawRect: не является вариантом (спасибо Prody за указание этого). Единственный вариант, который я вижу, - создать пользовательский подкласс UIView с пользовательской реализацией drawrect:.

+0

Из документов: класс UIImageView оптимизирован для рисования его изображений на дисплее. UIImageView не будет называть drawRect :. Я не могу найти никакого упоминания о _imageScaledToSize: интерполяцияКачество. Наверное, теперь я рисую свое изображение в drawRect родительского представления. – Prody

+0

Спасибо за исправление, Проди. Я должен был прочитать документы перед публикацией. Я отредактирую свой ответ соответственно. –

1

CGContextSetInterpolationQuality - это функция. Вам нужно позвонить ему с любыми параметрами, подходящими для вашей ситуации.

http://developer.apple.com/mac/library/qa/qa2001/qa1186.html

+0

И как вы называете эту функцию, чтобы применить ее к рисунку UIImageView? –

+1

Я бы нарисовал изображение в новом контексте, используя эту настройку, возьму полученный UIImage и установил свойство UIImageView.image на улучшенное изображение. –

2

От «UIImageView scaling/interpolation», это самый обтекаемый способ сделать это, если вы можете:

[[yourimageview layer] setMagnificationFilter:kCAFilterTrilinear] 

Обязательно #import <QuartzCore/CALayer.h>

Предупреждение о kCAFilterTrilinear: «Некоторые рендеры могут игнорировать или накладывать дополнительные ограничения, такие как исходные изображения, требующие двухмерных измерений ».