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