Bezelボタンを作る[11]ディゼーブル状態の画像をグレースケールで表示する

2010年6月25日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

[前回]

画像をグレースケールに変換する方法がわかったのでディゼーブル時の表示に適用してみる。

画像をグレースケール変換する

下記のサイトが参考になった。
[参考]Core Graphicsを使った画像のグレースケール変換と、その速度 - Ni chicha, ni limona - 平均から抜けられない僕 - iPhoneアプリ開発グループ

グレースケールの色空間を使ったビットマップコンテキストを作り、そこへ画像を書きだせばいいようだ。なるほど。

このサイトのコードを参考に(ほとんどコピー&ペーストだが)次のメソッドを作ってみた。
-(UIImage*)convertGrayScaleImage:(UIImage*)image
{
 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
 CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0,
             colorSpace, kCGImageAlphaNone);
 CGRect rect = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
 CGColorSpaceRelease(colorSpace);
 CGContextDrawImage(context, rect, [image CGImage]);
 CGImageRef grayscale = CGBitmapContextCreateImage(context);
 CGContextRelease(context);
 UIImage* grasyScaleImage = [UIImage imageWithCGImage:grayscale];
 CFRelease(grayscale);
 
 return grasyScaleImage;
}


適用前:
適用後:


上記は alpha=0.5f としてある。また毎回変換するのは勿体無いので一旦グレースケール画像ができたらキャッシュしておく。

- - - -
iPhoneでは Core Image が使えないので諦めかけていたが、簡易に出来る方法が見つかってちょっとうれしい。

Responses

Leave a Response

人気の投稿(過去 30日間)