レイヤーにペイントするアプリを開発しています。これは、私がペイントする方法を示すサンプルコードです。
UIImageView * currentLayer = // getting the right layer...
UIGraphicsBeginImageContext(currentLayer.frame.size);
[currentLayer.image drawInRect:currentLayer.bounds];
// Painting...
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
currentLayer.image = img;
UIGraphicsEndImageContext();
だから私は2種類のピクセルを持つ画像(1024x768)を持っています:
-塗装されたもの(それぞれ同じ色)
-透明なもの
すべてのピクセルが同じ色であることを知って、レイヤー全体の不透明なピクセルの色を変更する最良の方法は何ですか?
不透明なピクセルを 1 つずつ再描画する必要がありますか?
編集 :
David Rönnqvist が示唆したように、塗りつぶされた画像を私のレイヤーでマスクしてみます。
色を変えたいレイヤーはself.image
:
// Creating image full of color
CGRect imRect = self.bounds;
UIGraphicsBeginImageContext(imRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, imRect);
UIImage * fill = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// masking the image
CGImageRef maskRef = [self.image CGImage];
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([fill CGImage], mask);
self.image = [UIImage imageWithCGImage:masked];
ほとんど !レイヤーの正反対をマスクします。アルファピクセルのみがペイントされます...
何か案が ?