2013-04-21 3 views
0

У меня есть изображение, которое я использую в обычном UITableViewCell. Изображение - черный треугольник на прозрачном фоне, и я использую фильтр CIColorInvert, чтобы сделать его белым треугольником на прозрачном фоне.Фильтр CIImage растягивает мое изображение вертикально

Отфильтрованное (перевернутое) изображение растягивается вертикально, как я могу остановить это?

Если я загружаю UIImage непосредственно, не делая фильтрацию, что я получаю это:

arrow ok, but black

Если я применяю CIFilter то, что я получаю это:

enter image description here

Вот мой код:

// create the white triangle 
CIImage *inputImage = [[CIImage alloc] initWithImage: 
         [UIImage imageNamed:@"TriangleRight"]]; 

CIFilter *invertFilter = [CIFilter filterWithName:@"CIColorInvert"]; 
[invertFilter setDefaults]; 
[invertFilter setValue: inputImage forKey: @"inputImage"]; 

CIImage *outputImage = [invertFilter valueForKey: @"outputImage"]; 

CIContext *context = [CIContext contextWithOptions:nil]; 

rightArrow = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]]; 

В обоих случаях я установки изображения в UIImageView следующим образом:

cell.arrow.image = rightArrow; 

В UIImageView размеры 15х15 (в МБ). TriangleRight.png - 15x15 пикселей, [email protected] - 30x30 пикселей.

Что мне не хватает, чтобы предотвратить растягивание изображения CIFilter?

UPDATE: 5 минут после размещения вопроса я понял, проблему: Я использую Auto Layout и UIImageView не имеет явное ограничение высоты (только ширина). Добавление явного ограничения высоты разрешило проблему. Тем не менее, это все еще не объясняет, почему использование непосредственно обработанного UIImage (даже без явного ограничения высоты).

ответ

1
UIImageOrientation originalOrientation = self->imageview.image.imageOrientation; 
imageview.image = [[UIImage alloc] initWithCGImage:imgRef scale:1.0  orientation:originalOrientation]; 

Кроме того, с использованием первоначальной ориентации следует зафиксировать его.

Смежные вопросы