Swift - 核心图形和设置背景颜色?
Swift - Core graphics and setting background color?
我创建了这种方法,它从原始图像生成图像,但根据给定的大小向新图像添加填充。尽管我将白色设置为填充颜色,但图像的背景颜色始终为黑色,但一切正常。知道如何解决这个问题吗?
public extension UIImage {
public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, 0.0)
let context = UIGraphicsGetCurrentContext()
UIGraphicsPushContext(context);
let origin = CGPointMake(
(size.width - self.size.width) / 2.0,
(size.height - self.size.height) / 2.0
)
backgroundColor.setFill()
drawAtPoint(origin)
UIGraphicsPopContext()
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
编辑:
这是工作版本
public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
let origin = CGPointMake(
(size.width - self.size.width) / 2.0,
(size.height - self.size.height) / 2.0
)
backgroundColor.setFill()
CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height))
drawAtPoint(origin)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
在我看来,您将背景颜色设置为 "Clear"(无颜色),这意味着它将显示背景视图中设置的任何颜色...几乎可以肯定是黑色。
您需要将默认设置为 "UIColor.whiteColor()"。
backgroundColor.setFill()
行只是设置了当前上下文的填充颜色,并没有真正进行填充。执行填充的一种方法是在设置填充颜色后调用 CGContextFillRect(context, CGRect(x: 0, y: 0, width: size.width, height: size.height))
。
此外,您可能应该将 UIImage
的 scale
作为 UIGraphicsBeginImageContextWithOptions
中的 scale
参数传递,而不是 0.0
。此外,您根本不需要 push- 和 pop-context 行 - 您已经在当前上下文中工作了。
我创建了这种方法,它从原始图像生成图像,但根据给定的大小向新图像添加填充。尽管我将白色设置为填充颜色,但图像的背景颜色始终为黑色,但一切正常。知道如何解决这个问题吗?
public extension UIImage {
public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, 0.0)
let context = UIGraphicsGetCurrentContext()
UIGraphicsPushContext(context);
let origin = CGPointMake(
(size.width - self.size.width) / 2.0,
(size.height - self.size.height) / 2.0
)
backgroundColor.setFill()
drawAtPoint(origin)
UIGraphicsPopContext()
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
编辑:
这是工作版本
public func imageCenteredInParentWithSize(size: CGSize, backgroundColor: UIColor = UIColor.clearColor()) -> UIImage {
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), true, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
let origin = CGPointMake(
(size.width - self.size.width) / 2.0,
(size.height - self.size.height) / 2.0
)
backgroundColor.setFill()
CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height))
drawAtPoint(origin)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
在我看来,您将背景颜色设置为 "Clear"(无颜色),这意味着它将显示背景视图中设置的任何颜色...几乎可以肯定是黑色。
您需要将默认设置为 "UIColor.whiteColor()"。
backgroundColor.setFill()
行只是设置了当前上下文的填充颜色,并没有真正进行填充。执行填充的一种方法是在设置填充颜色后调用 CGContextFillRect(context, CGRect(x: 0, y: 0, width: size.width, height: size.height))
。
此外,您可能应该将 UIImage
的 scale
作为 UIGraphicsBeginImageContextWithOptions
中的 scale
参数传递,而不是 0.0
。此外,您根本不需要 push- 和 pop-context 行 - 您已经在当前上下文中工作了。