2017-05-23 5 views
0

Je me demande si c'est possible ou non, et si oui, comment puis-je l'atteindre. J'ai NSImageView de taille 120x120. Je veux mettre un NSImage à l'intérieur, mais mis à l'échelle un peu différemment puis régulièrement. Donc, disons que j'ai une image de 500x800 que je veux mettre à l'intérieur de la vue carrée. Ce que je veux atteindre est: prenez la zone carrée de taille 500x500, à partir du centre de l'image initiale de l'image, puis redimensionnez ce carré pour l'adapter à la taille 120x120 de nsimageview.Couper le carré de la taille de NSImage et l'adapter à l'échelle du carré

Y a-t-il un moyen de le faire?

Aussi serait bon de ne pas créer de fichier image séparé pour cette vignette.

Répondre

0

Ok, donc j'ai trouvé comment faire ça moi-même.

1) Vous devez découper un rectangle de la taille de destination à partir de l'image existante 2) Créez un NSImage à partir de ce rectangle et des données d'image.

 var originalImage : NSImage = NSImage() 

     if(FileManager.default.fileExists(atPath: self.fileUrl.absoluteURL.path)) 
     { 
      originalImage = NSImage(byReferencing: self.fileUrl.absoluteURL) 
     } 
     else 
     { 
      originalImage = NSImage(named: "NoImage")! 
     } 

     let originalSize = originalImage.size 
     var sideSize : CGFloat = 0 
     //2. get size of square, by checking what side is smaller 
     if(originalSize.width > originalSize.height) 
     { 
      sideSize = originalSize.height 
     } 
     else 
     { 
      sideSize = originalSize.width 
     } 

     var originalImageRect : CGRect = CGRect(x: 0, y: 0, width: originalSize.width, height: originalSize.height) 
     guard let imageRef = originalImage.cgImage(forProposedRect: &originalImageRect, context: nil, hints: nil) else { return } 

     let thumbnailRect = CGRect(x: (originalSize.width/2 - sideSize/2), y: (originalSize.height/2 - sideSize/2), width: sideSize, height: sideSize) 

     let drawImage = imageRef.cropping(to: thumbnailRect); 

     let newImage = NSImage(cgImage: drawImage!, size: NSSize(width: SLIDE_WIDTH, height: SLIDE_HEIGHT)) 

     OperationQueue.main.addOperation{ 
      self.thumbnail = newImage 
     }