2009-08-30 10 views
3

によって私のiPhoneアプリケーションで、私は、動的に生成さCGPath与えられたことにより、ユーザーが提供UIImageをクリップするユーザーを聞かせする必要があります。iPhone:クリップユーザ供給UIImage与えCGPathに

すべてその外部与えられる(閉鎖)CGPathが切り出されるべきであり、得られた画像は、パスの境界矩形によってトリミングされるべきです。

画像はソフトボーダーでクリップする必要があります。つまり、透明なピクセルから不透明なピクセルまで、クリッピングパスのエッジにあるアルファチャンネルには柔らかいグラデーションが必要です。

上記の効果を達成するための解決策はありますか?

主な問題は、そのソフトグラデーションを取得する方法です。私はCGPathをマスクにラスタライズしてラスタライズした後にぼかしてしまいましたが、iPhone API&hellipではぼかしに関するものは見つかりませんでした。クリッピングするよう

、私はCGPathGetBoundingBoxデータを使用することを計画しましたが、再読み込みのドキュメントは、得られたバウンディングボックスが私のために受け入れられないベジェと次曲線、制御点を含むであろうと私に語りました。さて、ゼロでないアルファピクセルのイメージの古いスキャンでは、代わりにジョブを実行する必要があります。バウンディングボックスの

+0

あなたが柔らかいグラデーションが必要な場合は、あまりにも画像マスクが必要になります。与えられたパスは固定されているか、動的に生成されていますか? – hatfinch

+0

指定されたパスが動的に生成されます。私は答えを更新しました。 –

+0

まあ、もちろん、質問を更新しました:-) –

答えて

0

は、制御点が含まれていないCGPathGetPathBoundingBoxを使用しています。

あなたはCoreImageに(ブラーのような)フィルタリングを見つけるでしょう。

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_tasks/ci_tasks.html#//apple_ref/doc/uid/TP30001185-CH3-TPXREF101から)基本CoreImageフィルタの使用

CIContext *context = [CIContext contextWithOptions:nil]; 
CIImage *image = [CIImage imageWithContentsOfURL:myURL]; 
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"]; 
[filter setValue:image forKey:kCIInputImageKey]; 
[filter setValue:@0.8f forKey:kCIInputIntensityKey]; 
CIImage *result = [filter valueForKey:kCIOutputImageKey]; 
CGRect extent = [result extent]; 
CGImageRef cgImage = [context createCGImage:result fromRect:extent]; 

フィルタ:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/uid/TP40004346

関連する問題