改變一張影像的色調有很多方法,最直覺的方式莫過於將該影像中的所有像素點 Pixel 取出,在經過飽和或是色相等換算之後在置入回 UIImage 中,但是這種方式不再本篇的討論範圍內,這邊要示範的是使用 CoreGraphics 所提供的函式,來達成類似的效果,其程式碼如下。
UIImage *iconImage = [UIImage imageNamed:@"logo.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);
//設定純色遮罩顏色
[[UIColor colorWithRed:0.1 green:1.0 blue:0.1 alpha:1.0] set];
//將顏色與原影像混和
CGContextFillRect(context, region);
CGContextRestoreGState(context);
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextDrawImage(context, region, iconImage.CGImage);
//將UIImage影像指定給UIImageView
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
間單說明一下製作次效果的流程,首先要先取得影像的大小,之後根據此影像大小我們製作一個「純色」的遮罩,當然讀者有興趣也可以使用不同的紋理來當作遮罩,最後繪製一個純色的矩形並與原始影像混合,兩張影像混合的規則是由 kCGBlendModeMultiply 來決定的。
沒有留言:
張貼留言