kin*_*cac 4 core-image ios ciimage swift
我正在使用CIImage,虽然我知道它不是线性图像,但它确实包含一些数据。
我的问题是CIImage的scope属性是否返回像素或点?根据说明很少的文档,它是工作空间坐标。这是否意味着无法从CIImage获取像素/点,而我必须转换为UIImage才能使用.size属性来获取点?
我有一个具有一定大小的UIImage,当我使用UIImage创建CIImage时,范围以磅为单位显示。但是,如果通过缩放的CIFilter运行CIImage,有时会得到以像素值返回的范围。
我会尽力而为。
如果您的来源是UIImage,则其范围size将与范围相同。但是请注意,这不是UIImageView(大小以磅为单位)。我们只是在谈论源图像。
通过CIFilter运行某事物意味着您正在操纵事物。如果您要做的只是操作color,则其大小/范围不应更改(与创建自己的颜色相同CIColorKernel-逐像素工作)。
但是,根据CIFilter,您可能会更改大小/范围。某些滤镜会创建蒙版或图块。这些实际上可能具有无限的范围!其他(模糊是一个很好的例子)对周围像素进行采样,因此它们的范围实际上会增加,因为它们对超出源图像大小的“像素”进行了采样。(自定义方式是CIWarpKernel。)
是的,相当多。以此为底线:
重点是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!
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
image = image.resizeToBoundingSquare(640)
Run Code Online (Sandbox Code Playgroud)
在此示例中,图像尺寸3200x2000将减小为640x400。否则图像尺寸或320x200将被放大到640x400。我在渲染图像之前以及创建要在CIFilter中使用的CIImage之前对图像执行此操作。
| 归档时间: |
|
| 查看次数: |
4810 次 |
| 最近记录: |