2014-01-30 6 views
3

Попытки наложить изображение меньшего размера, которые могут масштабироваться или поворачиваться на лагере изображение:Применить преобразование к UIImage при рисовании

+ (UIImage*)addToImage:(UIImage *)baseImage newImage:(UIImage*)newImage atPoint:(CGPoint)point transform:(CGAffineTransform)transform { 

    UIGraphicsBeginImageContext(baseImage.size); 
    [baseImage drawInRect:CGRectMake(0, 0, baseImage.size.width, baseImage.size.height)]; 

    [newImage drawAtPoint:point]; 
    //How would I apply the transform? 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

return result; 
} 

Как бы применить CGAffineTransform к newImage в этом контексте?

ответ

6

Вы можете использовать фреймворк CoreImage, это позволяет преобразовывать на CIImage экземплярах. Например:

CGAffineTransform transform = ...; 
CIImage* coreImage = newImage.CIImage; 

if (!coreImage) { 
    coreImage = [CIImage imageWithCGImage:newImage.CGImage]; 
} 

coreImage = [coreImage imageByApplyingTransform:transform]; 
newImage = [UIImage imageWithCIImage:coreImage]; 

Вы должны убедиться, что после вызова .CIImage, что не nil. Это произойдет, если UIImage был инициализирован CGImage. Если это так, то вам нужно будет выделить CIImage с соответствующим инициализатором.

+0

Я не смог найти ссылку на 'imageFromCIImage', где это? – oarfish

+0

Извините, должно быть 'imageWithCIImage:', была опечаткой. Я обновил ответ. – WDUK

+0

как насчет ориентации? его сломанный после транса! – tspentzas

1

Что-то вроде этого следует сделать это:

+ (UIImage*) addToImage:(UIImage *)baseImage newImage:(UIImage*)newImage atPoint:(CGPoint)point transform:(CGAffineTransform)transform { 

    UIGraphicsBeginImageContext(baseImage.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    [baseImage drawInRect:CGRectMake(0, 0, baseImage.size.width, baseImage.size.height)]; 

// [newImage drawAtPoint:point]; draw without applying the transformation 

    CGRect originalRect = CGRectMake(point.x, 
            point.y, 
            newImage.size.width, 
            newImage.size.height); 


    CGContextConcatCTM(context, transform); 
    CGContextDrawImage(context, originalRect, newImage.CGImage); 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return result; 
} 
+0

Это чертит newImage вверх тормашками. – soleil

+0

способ использования этот код .. –

Смежные вопросы