我正在使用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?
感谢您的任何建议。
答案 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