У меня есть два экземпляра NSImage. Я хочу, чтобы image2 располагался поверх изображения1 с определенным уровнем непрозрачности. Они имеют соответствующие размеры. Ни один из изображений не должен быть видимым в пользовательском интерфейсе.Смешайте два NSImages с помощью Swift на OS X
Как правильно настроить графический контекст и нарисовать на нем изображения, с полной непрозрачностью и еще одним полупрозрачным?
Здесь я читал несколько ответов, но я нахожу это сложным, тем более, что большинство из них, похоже, предназначены для Objective-C или применимы только к iOS. Любые указатели оцениваются. Если это может быть выполнено без необходимости использования CGContext, это будет еще лучше.
func blendImages(image1: NSImage, image2: NSImage, alpha: CGFloat) -> CGImage {
// Create context
var ctx: CGContextRef = CGBitmapContextCreate(0, inputImage.size.width, inputImage.size.height, 8, inputImage.size.width*4, NSColorSpace.genericRGBColorSpace(), PremultipliedLast)
let area = CGRectMake(0, 0, inputImage.size.width, inputImage.size.height)
CGContextScaleCTM(ctx, 1, -1)
// Draw image1 in context
// Draw image2 with alpha opacity
CGContextSetAlpha(ctx, CGFloat(0.5))
// Create CGImage from context
let outputImage = CGBitmapContextCreateImage(ctx)
return outputImage
}
В другом месте у меня есть это расширение, чтобы получить CGImages из моих NSImages:
extension NSImage {
var CGImage: CGImageRef {
get {
let imageData = self.TIFFRepresentation
let source = CGImageSourceCreateWithData(imageData as! CFDataRef, nil)
let maskRef = CGImageSourceCreateImageAtIndex(source, 0, nil)
return maskRef
}
}
}
Это использование Swift 1.2 на OS X 10.10. – Henrik