我正在使用CIImage,虽然我知道它不是线性图像,但它确实包含一些数据 .
我的问题是CIImage的extent属性是否返回像素或点?根据documentation,它说的很少,它's working space coordinates. Does this mean there'无法从CIImage获取像素/点,我必须转换为UIImage以使用.size属性来获取点数?
我有一个具有一定大小的UIImage,当我使用UIImage创建一个CIImage时,范围以点的形式显示 . 但是如果我通过缩放它的CIFilter运行CIImage,我有时会得到像素值返回的范围 .
2 回答
我会尽我所能回答 .
如果您的源是
UIImage
,则其size
将与范围相同 . 但是,请问,这不仅仅是 source 图像 .通过CIFilter运行某些东西意味着你正在操纵事物 . 如果你所做的只是操纵颜色,它的大小/范围不应该改变(与创建你自己的_595727相同 - 它按像素逐个工作) .
但是,根据CIFilter,您可能正在改变大小/范围 . 某些过滤器会创建蒙版或平铺 . 这些实际上可能具有无限的程度!其他(模糊是一个很好的例子)样本周围的像素,所以它们的范围实际上增加,因为他们采样"pixels"超出源图像的大小 . (自定义这些是
CIWarpKernel
. )是的,相当多 . 把这带到底线:
过滤器在做什么?是否需要简单地检查一个像素的RGB并做一些事情?然后UIImage大小应该是输出CIImage范围 .
滤镜是否会产生一些取决于像素周围像素的东西?然后输出CIImage范围略大 . 多少可能取决于过滤器 .
有些过滤器可以产生与输入无关的内容 . 其中大多数可能没有真正的范围,因为它们可以是无限的 .
分数是UIKit和CoreGraphics一直使用的 . 像素?在某些时候,CoreImage会这样做,但它是低级别的(除非你想编写自己的内核),你不应该在乎 . 范围通常 - 但请记住以上 - 等同于UIImage大小 .
EDIT
许多图像(特别是RAW图像)的大小可能会影响性能 . 我有一个UIImage的扩展,它将图像的大小调整为特定的矩形,以帮助保持一致的CI性能 .
用法:
在此示例中,3200x2000的图像大小将减少到640x400 . 或者图像尺寸或320x200将放大到640x400 . 我在渲染之前和创建在CIFilter中使用的CIImage之前对图像执行此操作 .
我建议你把它们看作是要点 . 没有比例也没有屏幕(CIImage不是绘制的东西),所以没有像素 .
由CGImage支持的UIImage是绘图的基础,除了CGImage之外,它还有一个比例尺;与屏幕分辨率一起,它为我们提供了从点到像素的转换 .