2017-05-23 7 views
0

可能かどうかは疑問です。 サイズが120x120のNSImageViewがあります。 私はその中にNSImageを入れたいのですが、ちょっと違って普通の方法でスケーリングしました。 私は、正方形の中に入れたいと思う500x800のイメージがあると言うことができます。 私が到達したいのは、最初のイメージイメージの中心から500x500の正方形の領域を取り出し、その正方形を120x120サイズのnsimageviewに合わせて縮小します。サイズの正方形をNSImageから切り取って、より小さい正方形に合うように縮尺を変えてください。

これを行う方法はありますか?

また、そのサムネイル用に別のイメージファイルを作成しないことをお勧めします。

答えて

0

わかりましたので、私はそれを自分で行う方法を見つけました。

1)既存の画像から宛先サイズの矩形を切り取る必要があります。 2)その矩形と画像データからNSImageを作成します。

 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 
     } 
関連する問題