2011-08-06 22 views
1

現在、クライアント用のアバター作成iOSアプリを試しています。ユーザーはアイテムの色を変更する必要があります。ヘルプ画像のマスク/境界で定義され、画像を上に重ねて表示する色付けレイヤー

クライアントは、効果的にシェードを生成するために、通常のようにさまざまなアルファ/不透明度の値を持つ.png形式でカラー化されるギャラリーアイテムを提供します。しかし、アイテムのカラー化の正しい最終結果は、透明領域がそのまま残るので、アイテムの「外側ストローク」で囲まれた背景領域を「塗りつぶし」、イメージを上に再描画するので、イメージをマスクしてカラーブレンドを適用することではありませんシェードが新しい色に適用されるようにします。次のような結果が生成さ

UIImage *image = item.image; 
UIGraphicsBeginImageContext(image.size); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(context, kCGInterpolationHigh); 

CGRect area = CGRectMake(0, 0, image.size.width, image.size.height); 

CGContextScaleCTM(context, 1, -1); 
CGContextTranslateCTM(context, 0, -area.size.height); 

CGContextSaveGState(context); 

// This applies the colorization only on the image mask 
//CGContextClipToMask(context, area, image.CGImage); 

[[UIColor redColor] set]; 
CGContextFillRect(context, area); 

CGContextRestoreGState(context); 

CGContextSetBlendMode(context, kCGBlendModeNormal); 

CGContextDrawImage(context, area, image.CGImage); 

UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

item.image = coloredImg; 

を:ここで

は私が達成したものです。

http://dl.dropbox.com/u/1237004/Screen%20shot%202011-07-15%20at%207.53.50%20%CE%BC.%CE%BC..png

これは基本的に、私は本当にズボンの外に拡大して赤い部分を除いて、達成したいものに近いです。

どのようにその部分を排除することは可能ですか?私はおそらく、イメージマスクやそれに類するもので定義されていない領域にアルファ値を減らすことを考えていましたが、解決策に近づくことはできませんでした。

ありがとうございます。

注:スクリーンショットに示す項目は、我々のアプリで使用されていないWeeMeeアバター作成アプリケーションの一部ではなく、私の実験の一部であり、全ての権利は、あなたがする必要があるそれは何のそれぞれの所有者

答えて

0

に属しクリッピングパスを設定し、内部領域内のみにCGを書き込むように指示することです。パンツを定義するパスを既に描いている場合は、これは自明です。 tutorial

はコメントに応じて更新:私はこれは何とか私の問題を解決しないと思う

Masking an image

+1

は、このチュートリアルを参照してください。あなたは、私が実際にパンツのパスを自分で描くわけではありませんが、パンツの.pngを使用してイメージマスクを作成します。あなたに別の提案がない限り、私が持っているアイテムからクリッピングパスを作成するための直接的な方法はありません。 thanx – attheodo

+0

ソースイメージの例を教えてもらえますか(カラーが適用されていないのですか?)おそらく、パンツの領域が明確に定義されている場合は、CGマスクを使用してクリッピングを実行できます。 – futureelite7

+1

これは、色が適用されていない同じイメージです(http://dl.dropbox.com/u/1237004/bottoms_005_outline_gM%402x.png)。パンツの領域は明確に定義されていますが、画像をマスクして色を付けると、私が望む正確な結果が得られません。あなたは、私が望む最終的な結果は、私の質問では、赤がズボンの領域から広がることなく、そのようなものであることがわかります。高槻 – attheodo

関連する問題