2015-01-06 5 views
2

Я разбиваю изображение 2880 x 2560 на два изображения 1440 x 2560. Я пытался использовать CGImageForProposedRect, но я не уверен, правильно ли я подошел к нему. Вот то, что я до сих пор (показать выход площадка, код прилагается в конце):Как разделить изображение с Swift для OSX

enter image description here

Но если вы заметили, даже несмотря на то, CGRects являются 1440x2560, leftImage и rightImage нет. Не так ли работает CGImageForProposedRect? Если нет, зачем нужен параметр CGRect?

import Cocoa 
import AppKit 
import CoreGraphics 

let image = NSImage(named:"image") 
if let image = image { 
    var imageRect:CGRect = CGRectMake(0, 0, image.size.width, image.size.height) 
    var imageRef = image.CGImageForProposedRect(&imageRect, context: nil, hints: nil) 

    var leftImageRect:CGRect = CGRectMake(0, 0, image.size.width/2.0, image.size.height) 
    var leftImageRef = image.CGImageForProposedRect(&leftImageRect, context: nil, hints: nil) 
    var leftImage = NSImage(CGImage:leftImageRef!.takeUnretainedValue(), size:NSZeroSize) 

    var rightImageRect:CGRect = CGRectMake(image.size.width/2.0, 0, image.size.width/2.0, image.size.height) 
    var rightImageRef = image.CGImageForProposedRect(&rightImageRect, context: nil, hints: nil) 
    var rightImage = NSImage(CGImage:rightImageRef!.takeUnretainedValue(), size:NSZeroSize) 
} 

ответ

1

кажется, что замена

var leftImageRef = image.CGImageForProposedRect(&leftImageRect, context: nil, hints: nil) 
var leftImage = NSImage(CGImage:leftImageRef!.takeUnretainedValue(), size:NSZeroSize) 

с

var leftImageRef = CGImageCreateWithImageInRect(imageRef!.takeUnretainedValue(), leftImageRect) 
var leftImage = NSImage(CGImage:leftImageRef, size:NSZeroSize) 

исправляет мою проблему. Однако я до сих пор не знаю, почему, поэтому, если у кого-то есть лучшее объяснение, я могу выбрать его как «Правильный ответ».

Спасибо!