1

テキストを含む UIImage があり、パターン UIImage をマスキングとして適用したいと考えています。これは可能ですか?UILabel では、CAGradientLayer を使用してこの種のグラデーションを取得できることを理解しています。しかし、ソースが UIImage の場合、これを行うことはできますか?

画像には、通常の文字以外の記号/写真などが含まれている場合があり、したがって UIImage. また、コンテキストに応じて異なるマスキング パターンを適用することで、画像を再利用することもできます。

これは可能ですか?

あなたの助けに感謝。

編集:すべての回答に感謝します。テキスト ラベルにグラデーションを適用したり、テキストを含む画像を作成したりすることを理解しています。しかし、私の目標はこれを取得することです.-->ここをクリック

つまり、背景が透明な花のような絵を描いたpngがあります。上の図に示すように、gradient.png を使用して、実行時にその画像内のオブジェクトにグラデーションを適用したいと考えています。それはマスキングで可能ですか?

ありがとう

4

4 に答える 4

3

CGImageMaskCreate を使用できるはずです。

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {

    CGImageRef maskRef = maskImage.CGImage; 

    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef), NULL, false);

    CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
    return [UIImage imageWithCGImage:masked];

}

より長い議論については、ここのコメント スレッドをチェックしてください: http://iosdevelopertips.com/cocoa/how-to-mask-an-image.html

于 2011-02-06T08:39:27.483 に答える
0

マスクを使用したサンプルは問題なく機能しますが、漏れています。CGImageMaskCreate と CGImageCreateWithMask は割り当てます (「作成」 -> 保持ルールに従います) ので、使用後にマスクとイメージを解放する必要があります。

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
UIImage * result =  [UIImage imageWithCGImage:masked];
CGImageRelease(mask);
CGImageRelease(masked);
return result;

ADC ドキュメントによると: ... 戻り値 Quartz ビットマップ イメージ マスク。CGImageRelease を呼び出して、このオブジェクトを解放する必要があります。

于 2012-01-22T10:26:45.573 に答える
0

はい、そうです :)

textField.textColor = [UIColor colorWithPatternImage:
[UIImage imageNamed:@"rainbowGradient.png"]];

強力なコントロールが必要な場合は、ジェイソン・ホワインのアイデアがうまくいくかもしれません. しかし、私はこれが好きです。約 8 行短いからです。

于 2011-02-06T08:41:37.667 に答える
0

何かをマスキングするテキストのイメージを描画するもう 1 つの方法を次に示します。これはブレンディング モードに基づいていkCGBlendModeSourceInます。クリアな背景にテキストを描画してから、その場所全体に塗りつぶしを描画します。

NSString *theString = ...;
UIFont *theFont = ...;
CGSize stringSize = [theString sizeWithFont:theFont];

// The background must be clear (fully transparent), hence NO as the 2nd argument
UIGraphicsBeginImageContextWithOptions(stringSize, NO, 0);
[theString drawAtPoint:CGPointZero withFont:theFont];
// This effectively colorizes the image. Use a pattern color...
[patternColor set];
UIRectFillUsingBlendMode(CGRectMake(0, 0, stringSize.width, stringSize.height), kCGBlendModeSourceIn);
// ... or an image:
[patternImage drawInRect:CGRectMake(0, 0, stringSize.width, stringSize.height) blendMode:kCGBlendModeSourceIn alpha:1.0f];

UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2011-02-06T14:32:38.790 に答える