核心映像:使用CICrop后,应用合成过滤器不会排队

时间:2011-11-17 16:05:28

标签: iphone ios core-image

我正在使用CICrop通过剪切图像的顶部和底部将图像裁剪为特定尺寸。

然后,我应用类似CIMultiplyCompositing过滤器的东西,将裁剪后的图像与另一张图像合并。

两个图像大小相同,但结果显示两个图像不对齐...一个是偏移的。

所以,我检查了以下内容:

NSLog(@"image after crop: %g, %g, %g, %g", imageToFilter.extent.origin.x,
                       imageToFilter.extent.origin.y,
                       imageToFilter.extent.size.width,
                       imageToFilter.extent.size.height);

NSLog(@"second image: %g, %g, %g, %g", secondImage.extent.origin.x,
                       secondImage.extent.origin.y,
                       secondImage.extent.size.width,
                       secondImage.extent.size.height);

这表明裁剪图像的origin.y具有我看到的偏移(使用CICrop的结果):

image after crop: 0, 136, 3264, 2176
second image: 0, 0, 3264, 2176

那么,有没有办法让我重置裁剪后的图像“extent”rect,以便origin.y为零?检查CIImage的文档,“extent”是一个只读属性。

或者我将不得不做一些非常低效的转换到另一个图像类型/原始数据然后再回到CIImage?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:10)

我找到了答案......这很简单。我只需要在裁剪之后在CIImage上应用“翻译”变换,就像这样:

imageToFilter = [imageToFilter imageByApplyingTransform:CGAffineTransformMakeTranslation(0, -imageToFilter.extent.origin.y)];

有效地将其y原点移回0。

答案 1 :(得分:1)

您也可以将其用作扩展。对于Swift:

import CoreImage

extension CIImage {
  var correctedExtent: CIImage {
    let toTransform = CGAffineTransform(translationX: -self.extent.origin.x, y: -self.extent.origin.y)
    return self.transformed(by: toTransform)
  }
}

您可以用作:

let corrected = ciImage.correctedExtent