我试图在iOS中用我的触摸擦除图像。通过将混合模式设置为kCGBlendModeClear,我能够做到这一点 - 但只能使用硬边。我可以用不同的线宽和alpha来绘制我的笔画,但看起来CGContextSetAlpha对kCGBlendModeClear没有效果。
我该怎么做?
答案 0 :(得分: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更改不会持久存在。
注意:这是大脑编译的,透明层可能不适合所有混合模式。如果是这样,请尝试将路径/图像绘制到第二个位图上下文中,然后使用上述混合模式绘制该上下文的内容。
您还可以尝试其他混合模式以获得不同的效果。