en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

4.06.2011

簡單改變 UIImage 色調的方法

 

改變一張影像的色調有很多方法,最直覺的方式莫過於將該影像中的所有像素點 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 來決定的。






沒有留言:

張貼留言