画像をグレースケールに変換する方法がわかったのでディゼーブル時の表示に適用してみる。
画像をグレースケール変換する
下記のサイトが参考になった。[参考]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