フラグに応じてカラーまたは白黒で描画できるUIImageViewが必要です。
BOOL isGrey;
QuartzブレンドモードをColorに設定して、元の画像の上に黒い長方形を描画することでそれを実行しようとしています。これは、画像のアルファマスクを尊重しないことを除いて機能します。
図を参照してください: 代替テキストhttp://img214.imageshack.us/img214/1407/converttogreyscaleillo.png
グーグルとSOを検索して、私はいくつかの解決策を見つけて試しましたが、どれもマスクを尊重していません。
上記の「WhatIget」画像を生成するコードは次のとおりです。
- (void)drawRect:(CGRect)rect {
if (isGrey) {
CGContextRef context = UIGraphicsGetCurrentContext();
// flip orientation
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
// draw the image
CGContextDrawImage(context, self.bounds, self.image.CGImage);
// set the blend mode and draw rectangle on top of image
CGContextSetBlendMode(context, kCGBlendModeSaturation);
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rect);
} else {
[self.image drawInRect:rect];
}
}
設定し忘れているクォーツ描画モードはありますか?Quartzプログラミングガイドを調べましたが、重複してハイパーリンクされている主題から必要な情報を1ビット抽出するのは非常に困難です。
明らかに、表示されている円だけでなく、マスクされた形状の画像に適用される一般的な解決策を探しています。