BlendMode颜色混合模式枚举值
来源:互联网 发布:吕思勉 知乎 编辑:程序博客网 时间:2024/06/05 15:53
BlendMode参数值及表现形式
blendMode作用
在对图片进行手动处理的时候,可能用到图层混合,如改变图片的颜色。常常获取CGContext,然后设置其blendMode参数。
为了形象理解BlendMode值的变化,我使用了一张主图标和辅图标(支付宝图标)作为测试,测试颜色为红色,注释中有序号的可以对应其变换结果
BlendModel参数值结束
如下(转):
switch (blendMode) { case kCGBlendModeNormal: { strMsg = @"kCGBlendModeNormal: 正常;也是默认的模式。前景图会覆盖背景图"; break; } case kCGBlendModeMultiply: { strMsg = @"kCGBlendModeMultiply: 正片叠底;混合了前景和背景的颜色,最终颜色比原先的都暗"; break; } case kCGBlendModeScreen: { strMsg = @"kCGBlendModeScreen: 滤色;把前景和背景图的颜色先反过来,然后混合"; break; } case kCGBlendModeOverlay: { strMsg = @"kCGBlendModeOverlay: 覆盖;能保留灰度信息,结合kCGBlendModeSaturation能保留透明度信息,在imageWithBlendMode方法中两次执行drawInRect方法实现我们基本需求"; break; } case kCGBlendModeDarken: { strMsg = @"kCGBlendModeDarken: 变暗"; //将线条色变为黑色,背景色设置为目的色 break; } case kCGBlendModeLighten: { strMsg = @"kCGBlendModeLighten: 变亮"; break; } case kCGBlendModeColorDodge: { strMsg = @"kCGBlendModeColorDodge: 颜色变淡"; break; } case kCGBlendModeColorBurn: { strMsg = @"kCGBlendModeColorBurn: 颜色加深"; //线条颜色(原本)加深,背景色设置为目的色 break; } case kCGBlendModeSoftLight: { strMsg = @"kCGBlendModeSoftLight: 柔光"; break; } case kCGBlendModeHardLight: { strMsg = @"kCGBlendModeHardLight: 强光"; //全为目的色 break; } case kCGBlendModeDifference: { strMsg = @"kCGBlendModeDifference: 插值"; break; } case kCGBlendModeExclusion: { strMsg = @"kCGBlendModeExclusion: 排除"; break; } case kCGBlendModeHue: { strMsg = @"kCGBlendModeHue: 色调"; break; } case kCGBlendModeSaturation: { strMsg = @"kCGBlendModeSaturation: 饱和度"; break; } case kCGBlendModeColor: { strMsg = @"kCGBlendModeColor: 颜色"; //感觉将图片线条色设置为白色,背景色设置为目的色,之后再再图片上加一个有透明度的目的色 break; } case kCGBlendModeLuminosity: { strMsg = @"kCGBlendModeLuminosity: 亮度"; break; } //Apple额外定义的枚举 //R: premultiplied result, 表示混合结果 //S: Source, 表示源颜色(Sa对应透明度值: 0.0-1.0) //D: destination colors with alpha, 表示带透明度的目标颜色(Da对应透明度值: 0.0-1.0) case kCGBlendModeClear: { strMsg = @"kCGBlendModeClear: R = 0"; //1.清空(如果图标背景色为白色则为全白) break; } case kCGBlendModeCopy: { strMsg = @"kCGBlendModeCopy: R = S"; //2全色覆盖整个图片 break; } case kCGBlendModeSourceIn: { strMsg = @"kCGBlendModeSourceIn: R = S*Da"; //3.线条变色 break; } case kCGBlendModeSourceOut: { strMsg = @"kCGBlendModeSourceOut: R = S*(1 - Da)"; //4.背景变为目的色,线条自动变为白色(比如图标线条原为蓝色,会自动变为白色) break; } case kCGBlendModeSourceAtop: { strMsg = @"kCGBlendModeSourceAtop: R = S*Da + D*(1 - Sa)"; //5.线条变色,目前感觉和SourceIn效果一致 break; } case kCGBlendModeDestinationOver: { strMsg = @"kCGBlendModeDestinationOver: R = S*(1 - Da) + D"; //6.背景色变为目的色,线条色不变 break; } case kCGBlendModeDestinationIn: { strMsg = @"kCGBlendModeDestinationIn: R = D*Sa;能保留透明度信息"; //7.只看到线条色(本色),无其他颜色 break; }
case kCGBlendModeDestinationOut: { strMsg = @"kCGBlendModeDestinationOut: R = D*(1 - Sa)"; //8.空白什么都没哟 break; } case kCGBlendModeDestinationAtop: { strMsg = @"kCGBlendModeDestinationAtop: R = S*(1 - Da) + D*Sa"; //9.会把整个矩形的背景填充目的色(如图9系列)原色保留 break; } case kCGBlendModeXOR: { strMsg = @"kCGBlendModeXOR: R = S*(1 - Da) + D*(1 - Sa)"; //10.线条变白,背景色变为目的色 break; } case kCGBlendModePlusDarker: { strMsg = @"kCGBlendModePlusDarker: R = MAX(0, (1 - D) + (1 - S))"; //11.线条变为黑色, 背景色变为目的色 break; } case kCGBlendModePlusLighter: { strMsg = @"kCGBlendModePlusLighter: R = MIN(1, S + D)(最后一种混合模式)"; //12.线条变为白色(混合色:如color为红色,就是偏粉色的白,有一定透明度的感觉) break; } default: { break; }以上中文解释(含//)是在如下代码段情况下发生的,不同代码段可能表示形式不一。
测试图标依赖下面代码,实际使用要考虑实际效果
改变图标代码参考:
func changeColor(_ color:UIColor, blendMode:CGBlendMode) -> UIImage { //方式一(可以) UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale) let context = UIGraphicsGetCurrentContext() color.setFill() //移动图片 context!.translateBy(x: 0, y: self.size.height) context!.scaleBy(x: 1.0, y: -1.0) let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) context!.draw(self.cgImage!, in: rect) //模式配置 context!.setBlendMode(blendMode) context!.addRect(rect) context!.drawPath(using: CGPathDrawingMode.fill) //创建获取图片 let coloredImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return coloredImage!}
颜色变换参考
原型图标:这里传颜色是传入的是red红色
3/5。
7.
9.
10
11
12(支付宝的图标有圆角处理)所以边角也有点色
这个是blendMode.Color的变换效果
阅读全文
0 0
- BlendMode颜色混合模式枚举值
- As3 BlendMode(混合模式)的测试
- CSS颜色混合模式特效
- CSS颜色混合模式
- CSS颜色混合模式
- PS 颜色混合模式深层计算
- ps的颜色混合模式算法
- 颜色混合
- Shader BlendMode Formulas shader的各种混合叠加模式算法.
- cocos2d-x颜色混合模式完成光照效果
- 公式宝典之颜色混合模式公式
- UIImage+BlendMode
- WebGL blendMode 详解
- 图片BlendMode 样式
- 颜色混合opengl
- 颜色混合opengl
- 颜色混合opengl
- 颜色混合opengl
- 机器学习 python编程库
- spring整合redis,配置文件设置。
- pandas读取csv文件进行处理时报错: TypeError: invalid type comparison
- MySQL
- Win7下访问redis,用vector存储查询结果
- BlendMode颜色混合模式枚举值
- 子序列的和(subsequence)
- 动态规划--至少取一个的分组背包--hdu3033 I love sneakers!
- 学生信息管理系统--知识小结(二)
- tomcat配置
- 12. Integer to Roman
- mysql 的 find_in_set函数使用方法
- 求逆序数两种方法:线段树/归并排序
- php数组排序