2016-01-17 6 views
-2

Я пытаюсь скопировать изображение с изображения 1 в изображение 2 пикселя за пикселем, и я сохраняю данные с изображения 1 в словаре: [UIColor:CGPoint].Рисование из словаря по пикселям от одного изображения к другому с одинаковыми координатами

Как нарисовать на CGContext все точки пикселя за пикселем с точным цветом для определенного пикселя на изображении 2 в том же CGPoint?

@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

Что вы пробовали до сих пор? Покажите свой собственный код, где вы хотите рисовать. – luk2302

+0

Я скопировал пиксели с фотографии, и я хочу нарисовать ее на другой фотографии в том же месте –

+0

Да, что вы пробовали в отношении рисунка? – luk2302

ответ

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

(Это также очень неэффективный способ делать вещи, но вы будете понять, что достаточно скоро ...)

+0

теперь он работает, но некоторые пиксели отсутствуют ... –

+0

Какие? Есть ли что-то другое в этих точках по сравнению с остальными? Вам придется отлаживать это самостоятельно. –

+0

В порядке я исправил его теперь, как вернуть его на изображение 2 в том же положении, из которого я беру пиксели? –