gpt4 book ai didi

ios - CIImage 以像素或点为单位的范围?

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:23 26 4
gpt4 key购买 nike

我正在使用 CIImage,虽然我知道它不是线性图像,但它确实包含一些数据。

我的问题是 CIImage 的范围属性是否返回像素或点?根据documentation ,说的很少,是工作空间坐标。这是否意味着无法从 CIImage 获取像素/点,我必须转换为 UIImage 才能使用 .size 属性获取点?

我有一个特定大小的 UIImage,当我使用 UIImage 创建一个 CIImage 时,范围以磅为单位显示。但是,如果我通过缩放它的 CIFilter 运行 CIImage,我有时会得到以像素值返回的范围。

最佳答案

我会尽量回答。

如果您的源是 UIImage,它的大小 将与范围相同。但是请注意,这不是 UIImageView(大小以磅为单位)。我们只是在谈论图像。

通过 CIFilter 运行一些东西意味着你在操纵东西。如果您所做的只是操纵颜色,它的大小/范围不应改变(与创建您自己的CIColorKernel 相同 - 它是逐像素工作的)。

但是,根据 CIFilter,您很可能正在更改大小/范围。某些过滤器会创建一个蒙版或图 block 。这些实际上可能具有无限的范围!其他人(模糊是一个很好的例子)对周围的像素进行采样,因此它们的范围实际上增加了,因为它们对超出源图像大小的“像素”进行了采样。 (自定义方面,这些是 CIWarpKernel。)

是的,相当多。总结一下:

  • 过滤器在做什么?是否需要简单地检查像素的 RGB 并执行某些操作?然后 UIImage 大小应该是输出 CIImage 范围。
  • 过滤器是否会产生依赖于像素周围像素的东西?那么输出的 CIImage extent 稍微大一点。多少可能取决于过滤器。
  • 有一些过滤器可以在不考虑输入的情况下产生一些东西。其中大部分可能没有真正的范围,因为它们可以是无限的。

点是 UIKit 和 CoreGraphics 始终使用的对象。像素?在某些时候 CoreImage 确实如此,但它在某种程度上是低级的(除非您想编写自己的内核),您不应该在意。范围通常 - 但请记住上述 - 等同于 UIImage 大小。

编辑

许多图像(尤其是 RAW 图像)的尺寸可能会影响性能。我有一个 UIImage 扩展,可以将图像大小调整为特定矩形,以帮助保持一致的 CI 性能。

extension UIImage {
public func resizeToBoundingSquare(_ boundingSquareSideLength : CGFloat) -> UIImage {
let imgScale = self.size.width > self.size.height ? boundingSquareSideLength / self.size.width : boundingSquareSideLength / self.size.height
let newWidth = self.size.width * imgScale
let newHeight = self.size.height * imgScale
let newSize = CGSize(width: newWidth, height: newHeight)
UIGraphicsBeginImageContext(newSize)
self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return resizedImage!
}
}

用法:

image = image.resizeToBoundingSquare(640)

在此示例中,3200x2000 的图像尺寸将缩小为 640x400。或者图像尺寸或 320x200 将被放大到 640x400。我在渲染图像之前和创建要在 CIFilter 中使用的 CIImage 之前对图像执行此操作。

关于ios - CIImage 以像素或点为单位的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43081906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com