在Swift

时间:2017-03-21 12:14:29

标签: arrays swift cocoa nsimage cgimage

我试图通过将图像划分为100x100的网格,将图像分割成10到000个较小的图像。当我运行代码时,我收到一个Error_Bad_Instruction。

import Cocoa
import CoreImage

public class Image {
public var image: CGImage?

     public func divide() -> [CGImage] {
        var tiles: [CGImage] = []
        for x in 0...100 {
            for y in 0...100 {

                let tile = image?.cropping(to: CGRect(x: (image?.width)!/x, y: (image?.height)!/y, width: (image?.width)! / 100, height: (image?.height)! / 100 ))
                tiles.append(tile!)

            }
        }
        return tiles
    }

    public init(image: CGImage) {
        self.image = image
    }
}

var img = Image(image: (NSImage(named: "aus-regions.jpg")?.cgImage(forProposedRect: nil, context: nil, hints: nil))!)
var a = img.divide()

1 个答案:

答案 0 :(得分:2)

您发布的代码存在一些问题:

  1. 强行包裹图片
  2. 循环包括100 - 你只需要99.或者评论建议:for x in 0..<100
  3. 在第一步中除以0 -
  4. 你的算法,没有形成网格。
  5. 我已经更新以获取网格,使用我在计算机上的图像,宽度和高度仅为10,因为它使用100太长了。

    import Cocoa
    import CoreImage
    
    let times = 10
    public class Image {
        public var image: CGImage?
    
        public func divide() -> [CGImage] {
            var tiles: [CGImage] = []
            for x in 0..<times {
                for y in 0..<times {
    
                    let tile = image?.cropping(to: CGRect(x: x * (image?.width)!/times, y: y * (image?.height)!/times, width: (image?.width)! / times, height: (image?.height)! / times ))
                    tiles.append(tile!)
    
                }
            }
            return tiles
         }
    
         public init(image: CGImage) {
             self.image = image
         }
     }
    
     if let image = NSImage(named: "bg.jpg")?.cgImage(forProposedRect: nil,   context: nil, hints: nil) {
          var img = Image(image: image)
          var a = img.divide()
     }