2017-03-21 3 views
0

Je tente de diviser une image en 10'000 plus petites, en divisant l'image en une grille de 100x100. Lorsque je cours le code, je reçois un Error_Bad_Instruction.Division d'une image en une grille dans Swift

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

Peut-être que vous devriez en boucle comme ceci: pour x dans 0 .. <100 { pour y dans 0 .. <100 {? –

Répondre

1

Il y a quelques problèmes avec le code que vous avez publié:

  1. forcés application de l'image
  2. boucles sont compris 100 - vous avez juste besoin 99. Ou comme commentaire suggère: for x in 0..<100
  3. vous divisez par 0 - dans la première étape
  4. votre algorithme, ne forme pas une grille.

J'ai mis à jour pour obtenir une grille, en utilisant une image que j'avais sur mon ordinateur, et avec des largeurs et des hauteurs de 10, parce que l'utilisation de 100 était trop longue.

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() 
}