2011-02-06 12 views
1

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

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

is this possible ?

あなたの助けに感謝。

編集:すべてのお返事ありがとうございます。 グラデーションをテキストラベルに適用したり、テキストを含むイメージを作成したりすることは理解しています。 私の目標はこれを得ることです.-->Click here

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

+0

あなたが達成しようとしているもののモックアップ(たとえばMade in Photoshop)が役立つでしょう。 –

+0

@krisここにリンクがあります。[リンク] http://i.imgur.com/Agszf.pngリンクは実際には "これは可能です" ..混乱する言葉で申し訳ありません。 .. – freelancer

答えて

3

ありがとう:長い議論について

- (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

+0

私は上記のコメントで達成しようとしていることのモックアップを提供しました。ここにリンク[リンク] http://i.imgur.com/Agszf.pngがあります。 CGImageMaskCreate()を使用する上記の方法を試しましたが、うまくいきませんでした。 – freelancer

0

をはい、それは:)

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

avyコントロール、ジェイソンワインの考えが働くかもしれません。しかし、私はこれが好きです。なぜなら、それは約8行短くなっているからです。

+0

が真です。私はラベルのために私のアプリケーションでこれを使用します。しかし私の場合、テキストはイメージの中にあります。 – freelancer

0

テキストをマスキングする画像を描画する別の方法があります。 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(); 
0

マスクを使用したサンプルはうまく動作しますが、漏れています。

CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
UIImage * result = [UIImage imageWithCGImage:masked]; 
CGImageRelease(mask); 
CGImageRelease(masked); 
return result; 
ADCのドキュメントを1として

: ... 戻り値 Aクォーツビットマップを はそうあなたが&画像使用した後、マスクを解除する必要があります - (ルールを保持> "作成" 以下) CGImageMaskCreateとCGImageCreateWithMaskを割り当てますかイメージマスク。あなたはCGImageReleaseを呼び出してこのオブジェクトを解放する責任があります。

関連する問題