核心图像:使用CICrop后,应用合成滤镜不对齐

9

我正在使用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

那么,有没有办法重置裁剪图像的“范围”矩形,使原点.y是零?检查CIImage的文档,“extent”是只读属性。

还是说我必须进行一些可怕的低效转换到另一个图像类型/原始数据,然后再回到CIImage?

感谢任何建议。

2个回答

17
我找到了答案...而且很简单。在裁剪CIImage之后,我只需要应用“翻译”变换即可:
imageToFilter = [imageToFilter imageByApplyingTransform:CGAffineTransformMakeTranslation(0, -imageToFilter.extent.origin.y)];

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


感谢您解决了这个问题,真的很有帮助。不过还有一个小错误。您需要对X范围进行归一化处理。imageToFilter = [imageToFilter imageByApplyingTransform:CGAffineTransformMakeTranslation(-imageToFilter.extent.origin.x, -imageToFilter.extent.origin.y)]; - Cortis Clark

2

您还可以将此用作扩展。对于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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接