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 才能正常瀏覽本網站,謝謝!

7.13.2011

繪製漸層顏色 Gradient 的方法


漸層顏色通常被使用在調色盤這類需要豐富色域的工具中,或是一些特殊的使用者介面設計裡,下面程式碼將示範如何製作一個 CGGradientRef 漸層顏色的模型,與它的使用方式,其程式碼如下。

首先是製作漸層顏色模型的方法。

//使用RGB顏色模型
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

//漸層中所包含的關鍵顏色 RGBA
CGFloat components[] = {1.0, 0.0, 0.0, 1.0, //紅色 不透明
                        0.0, 1.0, 0.0, 1.0, //綠色 不透明
                        0.0, 0.0, 1.0, 1.0, //藍色 不透明
                        1.0, 0.0, 0.0, 1.0};//紅色 不透明

//關鍵顏色所出現的位置
CGFloat locations[] = {0.0, 0.33, 0.66, 1.0};

//關鍵顏色的個數
size_t count = 4;

//製作漸層顏色模型
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, components, locations, count);
CGColorSpaceRelease(rgb);

上述程式碼在製作漸層顏色模型中,包含四個重要參數,分別使所要使用的顏色模型、漸層中所包含的關鍵顏色、關鍵顏色出現的位置與它的數目。觀察上述程式碼可以得知在顏色模型上我們使用 RGB 傳統的色彩模型,因此下面關鍵顏色的設定中就分別依照 RGB 模型的設定分別給予 0 ~ 1 的 RGBA 數值陣列,四個數值為一組顏色其中我們分別設定了四組顏色;接著是這些關鍵顏色的出現位置,如同一般繪圖軟體在製作漸層時一樣,光是給與顏色還不足製作漸層,還必須給予這些顏色所出現的位置,如程式碼第 11 行所示,分別給予這四個關鍵顏色出現位置,採用 0 ~ 1 的表示法,最後則是關鍵顏色的個數,這參數可以讓您在漸層的使用上更為靈活。

有了漸層顏色模型之後,下面就是將漸層顏色模型實際套用在繪圖上的方法。

//製作ImageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0, 100.0, 300.0, 30.0)];

//開始繪圖
UIGraphicsBeginImageContext(imageView.frame.size);

//指定畫布
CGContextRef context = UIGraphicsGetCurrentContext();

//繪製漸層線條並儲存畫布
CGContextDrawLinearGradient(context, gradient, CGPointMake(0.0, 0.0), CGPointMake(300.0, 0.0), 0);
CGContextSaveGState(context);

//將畫布指定給ImageView
imageView.image = UIGraphicsGetImageFromCurrentImageContext();

//結束繪圖
UIGraphicsEndImageContext();

//將ImageView顯示於畫面
[self.view addSubview:imageView];
[imageView release];

上述程式碼其實就只是基本的 CoreGraphic 繪圖方法,除了線段漸層外,也有放射狀的漸層,其程式瑪如下。

CGContextDrawRadialGradient(context, gradient, CGPointMake(150, 150), 120, CGPointMake(150, 150), 0, 0);





沒有留言:

張貼留言