从一个图像逐个像素地从字典中绘制到具有相同坐标的另一个图像

时间:2016-01-17 14:32:50

标签: ios swift dictionary uicolor cgpoint

我正在尝试逐个像素地从图像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)
    })
}

我试过这样但是图像是空的......

1 个答案:

答案 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)
}

(这也是一种非常低效的做事方式,但你很快就会明白这一点......)