22

前景に黄色の花瓶があり、背景が透明な画像があります。

ここに画像の説明を入力

私はCGContextでそれを描いています:

CGContextDrawImage(context, CGRectMake(0, 0, 100, 100), myImage.CGImage);

前に次のステートメントを使用して、その周りに影を描くことができますCGContextDrawImage

CGContextSetShadowWithColor(context, CGSizeMake(0,0), 5, [UIColor blueColor].CGColor);

ここに画像の説明を入力

しかし、画像の周りにストロークを入れたいので、次のようになります。

ここに画像の説明を入力

私がこれをした場合:

CGContextSetRGBStrokeColor(shadowContext, 0.0f, 0.0f, 1.0f, 1.0f);
CGContextSetLineWidth(shadowContext, 5);
CGContextStrokeRect(shadowContext, CGRectMake(0, 0, 100, 100));

(明らかに) 次のように、イメージ全体の周りに長方形の境界線を描画します。

ここに画像の説明を入力

これは私が必要とするものではありません。

しかし、3 番目の画像のように境界線を描画するにはどうすればよいでしょうか?

この場合、UIImageView を使用することはできないため、UIImageView の CALayer のプロパティを使用することはできません。

4

2 に答える 2

16

これを行う1つの方法は、膨張の数学的形態演算子を使用して画像のアルファチャネルを外側に「成長」させ、結果のグレースケール画像をマスクとして使用してストロークをシミュレートすることです。拡張したマスクを塗りつぶし、メインイメージを上に描画することで、ストロークの効果を得ることができます。この効果を示すデモを作成しました。Githubのhttps://github.com/warrenm/Morphologyで入手できます(すべてのソースはMITライセンスですが、役立つ場合は)。

そして、これが実際のスクリーンショットです:

ここに画像の説明を入力してください

これは驚くほど遅いことに注意してください(拡張にはすべてのピクセルでカーネルの反復が必要です)。そのため、ストローク幅を選択し、各ソース画像のマスク画像を事前に計算する必要があります。

于 2013-02-21T19:46:14.870 に答える
0

を呼び出す前にストロークの色と線幅を設定するかCGContextDrawImage、画像の周りのストロークのように見えるようにシャドウ(不透明度、ぼかしなど)を微調整してみます。これがうまくいくかどうか教えてください!

于 2013-02-20T19:06:56.273 に答える