CIImage过滤器垂直拉伸我的图像

时间:2013-04-21 19:22:00

标签: ios cocoa-touch ios6 uiimageview core-image

我有一张我在自定义UITableViewCell中使用的图片。图像是透明背景上的黑色三角形,我使用CIColorInvert滤镜使其成为透明背景上的白色三角形。

过滤(倒置)的图像正在垂直拉伸,我该如何阻止这种情况发生?

如果我直接加载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维度为15x15(在IB中)。 TriangleRight.png是15x15像素,TriangleRight @ 2x.png是30x30像素。

我错过了什么来防止CIFilter拉伸图像?

更新 发布问题5分钟后,我发现了问题:我正在使用自动布局,UIImageView没有明确的高度限制(仅宽度)。添加显式高度约束解决了问题。但是,这仍然无法解释为什么使用UIImage直接工作(即使没有明确的高度约束)。

1 个答案:

答案 0 :(得分:1)

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

此外,使用原始方向应该已修复它。