やり方は色々ありそうですが、今回使った方法を記録しておきます。
大まかな流れは
- CGImageを準備
- CGContextを準備
- リサイズ後のサイズを指定
- contextを使って書き込む
- NSImageに戻す
まずはあらかじめ準備したNSImageからNSBitmapImageRepを取り出し、さらにCGImageを取り出す。
guard let image = NSBitmapImageRep(data: sourceImage.tiffRepresentation!)?.cgImage else {
// エラー処理
}
次に各種パラメータを準備して、CGContextを作成。
let bitsPerComponent = 8
let bytesPerRow = 4 * newWidth
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
guard let bitmapContext = CGContext(data: nil, width: newWidth, height: newHeight, bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) else {
// エラー処理
}
let bitmapSize = NSMakeSize(CGFloat(newWidth), CGFloat(newHeight))
let bitmapRect = NSMakeRect(0.0, 0.0, bitmapSize.width, bitmapSize.height)
bitmapContext.draw(image, in: bitmapRect)
最後にNSImageに戻す。
guard let newImageRef = bitmapContext.makeImage() else{
// エラー処理
}
let newImage = NSImage(cgImage: newImageRef, size: bitmapSize)
0 件のコメント:
コメントを投稿