0

レイヤーにペイントするアプリを開発しています。これは、私がペイントする方法を示すサンプルコードです。

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];

ほとんど !レイヤーの正反対をマスクします。アルファピクセルのみがペイントされます...

何か案が ?

4

1 に答える 1

1

実際、それは非常に単純でした。

drawInRectUIImage には、不透明なピクセルのみを描画するメソッドがあります。

コードは次のとおりです( から呼び出されますUIImageView):

CGRect rect = self.bounds;
UIGraphicsBeginImageContext(rect.size);
[self.image drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeSourceIn);
CGContextSetFillColorWithColor(context, newColor.CGColor);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

iPhoneに感謝- どのように画像に色を付けますか?

于 2013-02-01T11:48:05.800 に答える