-[UIImage drawInRect:blendMode:alpha:]のブレンドモードを活用した色バリエーションの作り方。
こういうのをプログラムで色をつけて
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT47JKMuYPYrUfukSJdGnKZHjl9REJOWhNPvjFJIsx8zLhDUjxgdfW35dheRsc0oEcG41YsKQ8d48hhyhqu31gL7OUgLxx3J0oO30cKo0FPT-Ur4KceAtk4fGI7OVRCwrr6vbNxzsm1Z1d/s320/130402-0006.jpg)
こうする
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZgq7JBN6eonS6j6WOyQp6X0tfdFoyoW74vZyIWD2G2Rp2LeAiqi8Id4yfyHDJkn6XsK_T2AWdOjl5NNw5aLHlTDJKyr8_WZM2aNeZWdVU9nZs3zrVM7O6eEeAvPihb6RvhWEZwzsZnB7d/s320/130402-0007.jpg)
やり方はシンプル
1. image context を作成
2. 指定の色で塗りつぶし
3. ブレンドモードを指定して、画像を上書き。
4. カレントcontextからUIImageを取り出す。
なお元となる画像はあらかじめ背景を透明にしてアルファチャンネルを持っておく(pngなどを使う)。
コードはこんな感じ。
- (UIImage *)tintedImageWithColor:(UIColor *)tintColor blendingMode:(CGBlendMode)blendMode { UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f); [tintColor setFill]; CGRect bounds = CGRectMake(0, 0, self.size.width, self.size.height); UIRectFill(bounds); [self drawInRect:bounds blendMode:blendMode alpha:1.0f]; if (blendMode != kCGBlendModeDestinationIn) [self drawInRect:bounds blendMode:kCGBlendModeDestinationIn alpha:1.0]; UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return tintedImage; }