iphone橡皮擦功能的实现

如何正确的实现橡皮擦功能

很多朋友遇到过这个问题,如何实现橡皮擦功能呢?
简单的解决方法是取背景色然后绘制,这个是不对的。应该说是很迫不得已的选择!
我们希望清除图片数据再具体像素上的数据或者都赋值为0.

CGContextSetBlendMode 函数会影响绘制时候的混色算法

例如点击橡皮擦后设置

CGContextSetBlendMode(context, kCGBlendModeClear);

这样再绘制时就会清除图像数据。

其它模式还包括

kCGBlendModeNormal
kCGBlendModeMultiply
kCGBlendModeScreen
kCGBlendModeOverlay
kCGBlendModeDarken
kCGBlendModeLighten
kCGBlendModeColorDodge
kCGBlendModeColorBurn
kCGBlendModeSoftLight
kCGBlendModeHardLight
kCGBlendModeDifference
kCGBlendModeExclusion
kCGBlendModeHue
kCGBlendModeSaturation
kCGBlendModeColor
kCGBlendModeLuminosity



但是还需要继续深入。我们的绘制操作应该是对一个CGContextRef进行,这个东西(看Ref就知道实际上是个指针)的创建过程还会影响到我们的橡皮擦效果。
使用CGBitmapContextCreate函数创建CGContextRef过程中,

CGBitmapContextCreate(<#void * data#>, <#size_t width#>, <#size_t height#>, <#size_t bitsPerComponent#>, <#size_t bytesPerRow#>, <#CGColorSpaceRef colorspace#>, <#CGBitmapInfo bitmapInfo#>)

最后一个参数CGBitmapInfo在这里很关键。

只有使用kCGImageAlphaPremultipliedFirst才会让该函数创建一个XRGB Context,这样的bitmap在绘制时才会真正透明alpha为0的部分. 就会出现擦去上面一层的时候露出底下的图像。
如果使用kCGImageAlphaNoneSkipLast或其它.... 会创建一个ARGB Context,这样的结果是所以alpha为0的部分都是以黑色绘制。

转自:
http://www.cocoachina.com/bbs/read.php?tid=44397
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值