我正在尝试逐个像素地从图像1复制到图像2,并且我将图像1中的数据保存在字典中:[UIColor:CGPoint]
。
如何在CGContext上绘制所有点,逐个像素地使用同一CGPoint上图像2上某些像素的确切颜色?
@IBAction func save(sender: UIButton) {
UIGraphicsBeginImageContext(CGSizeMake(100, 50))
let context = UIGraphicsGetCurrentContext()
for (color,point) in dict{
drawPixel(context!, startPoint: point, color: color.CGColor)
}
testIV.image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
}
func drawPixel(context:CGContextRef, startPoint:CGPoint, color:CGColorRef){
dispatch_async(dispatch_get_main_queue(), {
CGContextSaveGState(context)
CGContextSetLineCap(context, .Square)
CGContextBeginPath(context)
CGContextSetStrokeColorWithColor(context, color)
CGContextSetLineWidth(context, 1.0)
CGContextMoveToPoint(context, startPoint.x + 0.5, startPoint.y + 0.5)
CGContextAddLineToPoint(context, startPoint.x + 0.5, startPoint.y + 0.5)
CGContextStrokePath(context)
CGContextRestoreGState(context)
})
}
我试过这样但是图像是空的......
答案 0 :(得分:0)
取消对dispatch_async
的通话。您希望您的绘图代码立即运行,但dispatch_async
会导致它在以后save
方法的其余部分完成后很久就会运行。
func drawPixel(context:CGContextRef, startPoint:CGPoint, color:CGColorRef){
CGContextSaveGState(context)
CGContextSetLineCap(context, .Square)
CGContextBeginPath(context)
CGContextSetStrokeColorWithColor(context, color)
CGContextSetLineWidth(context, 1.0)
CGContextMoveToPoint(context, startPoint.x + 0.5, startPoint.y + 0.5)
CGContextAddLineToPoint(context, startPoint.x + 0.5, startPoint.y + 0.5)
CGContextStrokePath(context)
CGContextRestoreGState(context)
}
(这也是一种非常低效的做事方式,但你很快就会明白这一点......)