延續前一篇簡單改變 UIImage 色調的方法,這次我們將純色的遮罩改成 2D 材質紋理,並套用不同的混色分式,看看有什麼神奇的果,其程式碼如下。
下圖是我們所使用的 2D 材質紋理,在程式碼中它被命名為 textureImage。
以下程式碼,就是將我們的 Logo 與 textureImage 做合成的示範。
UIImage *iconImage = [UIImage imageNamed:@"logo.png"];
UIImage *textureImage = [UIImage imageNamed:@"texture.png"];
UIGraphicsBeginImageContext(iconImage.size);
//設定參考範圍
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, 1, -1);
CGRect region = CGRectMake(0, 0, iconImage.size.width, iconImage.size.height);
CGContextTranslateCTM(context, 0, -region.size.height);
CGContextSaveGState(context);
//可以有保留透明背景的效果
CGContextClipToMask(context, region, iconImage.CGImage);
//將材質紋理與原影像混和
CGContextDrawImage(context, region, textureImage.CGImage);
CGContextRestoreGState(context);
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextDrawImage(context, region, iconImage.CGImage);
//將影像指定給imageView
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
上述程式碼中 kCGBlendModeColor 部份,就是我們所使用的混合方式之一,它可以保留顏色的鮮明度並且依照材質紋理的亮度做適當的混合,當然在 CoreGraphics 中還有許多不同的混合定義 CGBlendMode,有興趣的讀者可以自行實驗。
沒有留言:
張貼留言