swift - 将图片拆分为图 block 并放入数组

标签 swift image sprite-kit crop tile

我有一个大的 Tilesheet(一张图片中有超过 1000 个图 block ),如下所示:enter image description here

每个图 block 都是 64x64,我想拆分图片。在这个例子中,我将 4 个瓷砖放在一个数组中。我怎样才能做到这一点?有不同的尺寸?我需要一些魔法(数学)或更好的想法,我怎样才能在循环中获得正确的裁剪位置。

一些快速编码的代码:

func cropImage(image: UIImage, tileSize: Int) -> [UIImage]? {
    if Int(image.size.height) % 64 != 0 && Int(image.size.width) % 64 != 0 {
        return nil
    }

    let hCount = Int(image.size.height) / tileSize
    let wCount = Int(image.size.width) / tileSize

    var tiles:[UIImage] = []

    for i in 0...hCount {
        for p in 0...wCount {
            let temp:CGImage = image.cgImage!.cropping(to: CGRect.zero)!
            tiles.append(UIImage(cgImage: temp))
        }
    }
    return tiles
}

最佳答案

在每次通过循环时,您需要两条信息:

  1. 图 block 的大小是多少?这对所有瓷砖都是一样的;你只需要在循环之前计算一次。

  2. 磁贴的来源是什么?这对于每个图 block 都是不同的。您将循环遍历 x 计数和 y 计数,在最内层的循环中,您将根据图 block 大小计算这个图 block (即这个 x 和 y)的原点你已经知道了。

现在您知道要用于 拼贴的原始图像的确切矩形。剩下的就很简单了。

但是,我建议考虑一下裁剪到该矩形的实际方式。您建议通过调用 CGImage 的 cropping(to:) 进行裁剪。但是,在类似的情况下,这不是我所做的。我通过将原始 UIImage 在所需原点的负值绘制到所需大小的图像图形上下文中来制作 UIImage。

关于swift - 将图片拆分为图 block 并放入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076184/

相关文章:

ios - 根据子节点检索节点的键

swift - 全局控制按钮外观

javascript - Img 加载和嵌套 div

ios - 如何给 Sprite 准确的触摸位置?

ios - 如何优化以获得更好的帧率?

swift - 带菜单栏的屏幕 OS X

ios - 如何在函数中使用 OpaquePointer?

html - 如何将 figcaption 放在图像顶部

css - 图片超出父尺寸

ios - SKNode 的运动效果