2011-10-17 2 views
1

iOSで自分のタッチで画像を消去しようとしています。ブレンドモードをkCGBlendModeClearに設定することで、これを行うことができますが、ハードエッジのみで行うことができます。ライン幅とアルファを変えてストロークを描くことができましたが、CGContextSetAlphaはkCGBlendModeClearで効果がないようです。CGBitmapContextでソフト消去のストロークを実装するには

どうすればよいですか?

答えて

2

私はkCGBlendModeDestinationOutで透明層の合成を使用します(Da * (1 - Sa), Dc * (1 - Sa)。)このような何か:

CGPathRef pathToErase = ...; // The path you want erased 
// could also be an image or (nearly) anything else 
// that can be drawn in a bitmap context 

CGContextSetBlendMode(ctx, kCGBlendModeDestinationOut); 
CGContextBeginTransparencyLayer(ctx, NULL); 
{ 
    CGContextSetGrayFillColor(ctx, 0.0, 1.0); // solid black 

    CGContextAddPath(ctx, pathToErase); 
    CGContextFillPath(ctx); 
    // the above two lines could instead be CGContextDrawImage() 
    // or whatever else you're using to clear 
} 
CGContextEndTransparencyLayer(ctx); 

あなたはまたに透明層の後/前GSTATE(CGContextSaveGState()/CGContextRestoreGState())を保存し、復元する必要があります注意ブレンドモードと他のgstateの変更が持続しないようにしてください。

注:これは脳がコンパイルされているため、すべてのブレンドモードで透明レイヤーがうまく動作しない可能性があります。その場合は、パス/イメージを2番目のビットマップコンテキストに描画してから、上記のブレンドモードでそのコンテキストの内容を描画してみてください。

また、さまざまな効果のために他のブレンドモードを試すこともできます。

+0

これはうまくいきました - 私はkCGBlendModeDestinationOutを編集しています – user441669

関連する問題