【发布时间】:2017-04-09 02:41:34
【问题描述】:
我有一个接受UIImage 的类,用它初始化CIImage,如下所示:
workingImage = CIImage.init(image: baseImage!)
然后使用图像以 3x3 的模式从其中切出 9 个相邻的正方形 - 在一个循环中:
for x in 0..<3
{
for y in 0..<3
{
croppingRect = CGRect(x: CGFloat(Double(x) * sideLength + startPointX),
y: CGFloat(Double(y) * sideLength + startPointY),
width: CGFloat(sideLength),
height: CGFloat(sideLength))
let tmpImg = (workingImage?.cropping(to: croppingRect))!
}
}
那些 tmpImgs 被插入到一个表中并在以后使用,但除此之外。
此代码适用于 IOS 9 和 IOS 10 模拟器,但不适用于实际的 IOS 10 设备。生成的图像要么全是空的,要么其中一个就像它应该是的一半,而其余的又是空的。
这不是IOS 10中应该做的吗?
【问题讨论】:
-
显然一切都取决于
sideLength和startPointX和startPointY的正确且有意义的值。但是你没有给出关于如何得出这些关键数字的任何线索。 (我还应该提到,像“在模拟器上工作但在设备上不工作”这样的现象通常是由线程问题引起的。) -
对不起 - 还有一件事。你为什么要通过 CIImage 呢?我有点担心这是因为你认为这是裁剪 UIImage 的方法——但事实并非如此。如果您对 CIImage 没有特别的用途,即如果您不打算应用 CIFilter,则根本不要使用它!
-
此代码不会裁剪
workingImage。裁剪后的图像分配给tmpImg,但由于从未使用过该变量而立即释放。所以workingImage不变。这是真正的代码吗? -
@matt,实际上,这确实是我认为裁剪图像的方式。我不知道任何其他方法,因为我在互联网上找到的大多数与裁剪相关的东西要么根本不起作用,要么使用 CIImage。如果你指出我正确的方式,我真的很感激。
-
@Codo,
tmpImg被添加到循环中的图像数组中,我忽略了它,因为我认为在这种情况下它并不重要。就像我说的,这种方法在IOS9设备上确实可以正常工作,这让我更加困惑。