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