FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

UIColorの値をRGBやHSBで取得する、RGB - HSB変換する [Xcode]

UIColorの色の値をRGB+αやHSB+αで取得する方法と、RGB - HSB変換する方法をご紹介します。

1. RGB+αで取得


そもそも Objective-Cには getRed:green:blue:alpha: というメソッドがありまして、これでRGBαの値を取得できます。しかし、grayColorやwhiteColor等のグレースケールの色では、このメソッドがうまく働きません。
なので場合分けをして取得を行います。

CGColorGetNumberOfComponentsというメソッドで、グレースケールの色かどうかを判別できます。
グレースケールの色ではこの値が2となり、輝度(0.0が黒、1.0が白)とα値が取得できます。
グレースケール以外の色ではこの値が4となり、RGBの各値とα値が取得できます。

実際のコードは以下のようになります。
戻り値が red, green,blue,alphaの4つになるので、「参照渡し」という手法も使います。呼び出し側では引数の頭に & を付け、呼ばれた側では頭に * を付けてアクセスすることで、呼び出し側の複数の引数に値を入れることが出来ます。

- (void)getRGBA:(UIColor *)color red:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha
{
// numComponentsを取得
const int numComponents = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat *components = CGColorGetComponents(color.CGColor);
// numComponents == 2 ならグレーケール RGBに同じ値と alphaを取得
if(numComponents == 2) {
*red = components[0];
*green = components[0];
*blue = components[0];
*alpha = components[1];
}
// numComponents == 4 ならRGBAを取得
else {
*red = components[0];
*green = components[1];
*blue = components[2];
*alpha = components[3];
}
}

■呼出し元
UIColor *color = [UIColor orangeColor];
CGFloat red, green ,blue, alpha;

// 参照渡しにより、red, green,blue,alphaのそれぞれに値が入る
[self getRGBA:color red:&red green:&green blue:&blue alpha:&alpha];


2. HSB+αで取得


色を「色相、彩度、明度」で表すHSBでも、getHue: saturation: brightness: alpha: というメソッドがありますが、RGBの時と同様にグレースケールでは働かないので場合分けが必要です。

- (void)getHSBA:(UIColor *)color hue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
{
// numComponentsを取得
const int numComponents = CGColorGetNumberOfComponents(color.CGColor);
const CGFloat *components = CGColorGetComponents(color.CGColor);
// numComponents == 2 ならグレーケール brightnessと alphaを取得
if(numComponents == 2) {
*hue = 0.0;
*saturation = 0.0;
*brightness = components[0];
*alpha = components[1];
}
// numComponents == 4 ならHSBAを取得
else {
[color getHue:hue saturation:saturation brightness:brightness alpha:alpha];
}
}

■呼出し元
UIColor *color = [UIColor orangeColor];
CGFloat hue, saturation ,brightness, alpha;

// 参照渡しにより、hue saturation ,brightness, alphaのそれぞれに値が入る
[self getHSBA:color hue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];


3. RGB - HSB変換


上記の応用で、RGBで指定した色をHSBに変換したり、その逆もできます。

- (void)getRGBA:(UIColor *)color red:(CGFloat *)red green:(CGFloat *)green blue:(CGFloat *)blue alpha:(CGFloat *)alpha
{
// 上記と同じ実装...
}
- (void)getHSBA:(UIColor *)color hue:(CGFloat *)hue saturation:(CGFloat *)saturation brightness:(CGFloat *)brightness alpha:(CGFloat *)alpha
{
// 上記と同じ実装...
}

■呼出し元
// RGBで色を設定
UIColor *color = [UIColor colorWithRed:0.2 green:0.5 blue:0.8 alpha:1.0];
CGFloat hue, saturation ,brightness, alpha;
// HSBを取得
[self getHSBA:color hue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];

// HSBで色を設定
color = [UIColor colorWithHue:0.6 saturation:0.2 brightness:0.6 alpha:1.0];
CGFloat red, green ,blue;
// RGBを取得
[self getRGBA:color red:&red green:&green blue:&blue alpha:&alpha];
関連記事

コメントの投稿

非公開コメント

Appご紹介
K app designのAppをご紹介します

ねこわけ

画面中央の猫を次々に仕分けるゲームです。

あまり計算機

あまりを計算できる割算専用の計算機です。

6オクターブ ピアノ

6オクターブ鍵盤のピアノアプリです。iPad専用。

Dynamic Drum

様々な演奏法が楽しめるドラム演奏アプリです。

クイズボタン

早押しクイズのサポートをするアプリです。

クイズボタン Pro

クイズボタンに点数表示機能が付きました。

クイズボタン HD

クイズボタンのiPad専用版。回答者ボタンが8つに増量。

ベロシティ ピアノ

タップの強弱で音量が変わるピアノアプリです。

TIMERx4

4つのキッチンタイマーを同時に動作できるアプリです。

アナデジClock

アナログとデジタルが融合した時計です。
検索フォーム
最新記事
最新コメント
カテゴリ
人気ページ
月別アーカイブ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。