核心图像:使用 CICrop 后,应用合成过滤器不对齐
Posted
技术标签:
【中文标题】核心图像:使用 CICrop 后,应用合成过滤器不对齐【英文标题】:Core Image: after using CICrop, applying a compositing filter doesn't line up 【发布时间】:2011-11-17 16:05:27 【问题描述】:我正在使用 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
那么,我有什么办法可以重置裁剪图像的“范围”矩形,使 origin.y 为零?检查 CIImage 的文档,“范围”是一个只读属性。
或者我将不得不做一些非常低效的转换为另一种图像类型/原始数据,然后再转换回 CIImage?
感谢您的建议。
【问题讨论】:
【参考方案1】:我想出了这个问题的答案……而且很简单。我只需要在裁剪 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)];【参考方案2】:您也可以将其用作扩展程序。对于斯威夫特:
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
【讨论】:
以上是关于核心图像:使用 CICrop 后,应用合成过滤器不对齐的主要内容,如果未能解决你的问题,请参考以下文章