BlendMode颜色混合模式枚举值
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的变换效果
BlendMode颜色混合模式枚举值相关推荐
- 扩展方法 枚举值_扩展枚举功能的两种方法
扩展方法 枚举值 前言 在上一篇文章中,我解释了如何以及为什么在Java代码中使用enums而不是switch/case控制结构. 在这里,我将展示如何扩展现有enums功能. 介绍 Java enu ...
- CSS颜色混合模式特效
查看原文:http://www.ibloger.net/article/394.html 注意:只有使用最新版的谷歌浏览器.火狐浏览器,才能正确的显示本文中的演示. Photoshop里最没有用处的一 ...
- DxfCode各枚举值意义
转自:http://www.cnblogs.com/jdmei520/articles/1326117.html 下表给出了组码(或组码范围)及其说明.在表中,"固定"表示该组码的 ...
- Java –比较枚举值
在Java中,可以使用==运算符比较Enum值. 1. Java枚举示例 Language.java package com.mkyong.javapublic enum Language {JAVA ...
- 获取枚举值上的Description特性说明
/// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...
- 输入今天是星期几的序号,给今天和昨天赋予枚举值,并输出昨天是星期几的枚举值
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p165 习题6 4.输入今天是星期几的序号(0~6代表星期天至星期六),给今天和昨天赋予枚举值,并输出 ...
- 如何从Java中的字符串值获取枚举值?
说我有一个枚举 public enum Blah {A, B, C, D } 我想找到一个字符串的枚举值,例如"A"就是Blah.A 怎么可能做到这一点? Enum.valueOf ...
- mysql 改变枚举值_mysql 改变数据类型为枚举不成功?
很明显的错误啊,你表里面内容有误,可以先将列gender的内容全部update成female和male,然后再运行这条sql脚本. 以下内容来源:MYSQL中 ENUM 类型 ENUM类型 ENUM ...
- OpenCV中函数imread的参数flags的枚举值(可设置值)及其具体意义
imread函数的原型如下: C++: Mat cv::imread(const String & filename,int flags = IMREAD_COLOR) Python: ret ...
最新文章
- Django3.0 +Python3 连接mysql遇到django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer
- 最长上升子序列(LIS)长度及其数量
- DSP平台实现图像识别算法总体来说不如嵌入式?
- windowsAPI验证上下级证书关系
- SAP Spartacus 关于列表点击focus Accessibility的需求
- 如何对AWS RDS SQL Server数据库进行分类
- angularJs为什么在近几年风头一时无二?
- flutter去掉输入框最大字数显示
- 空调开关html,酒店墙上空调开关图解—酒店墙上空调开关图案是什么意思
- linux异步io缺陷,具有libaio性能问题的Linux异步IO
- cocos2dx报错OpenGL error 0x0501
- 【SQL注入技巧拓展】————14、Bypass 360主机卫士SQL注入防御(附tamper脚本)
- 站在巨人的肩膀上(转载)
- 申万一级行业指数是什么?
- Hog源码注释(hog.cpp的注解)
- H6062FNL 普思Pulse 网络变压器
- 【考研经验】双非二战山东大学计算机技术初试第二经验贴
- 10个维修中最常见的蓝屏代码,值得收藏!
- 一次jdk1.7升级jdk1.8后导致redis运行时blocked_clients过多问题解决
- 为什么myeclipse9.0解析类时会多一个类名呢!解决方案
热门文章
- [转载]树莓派新版系统上使用mjpg-streamer获取USB摄像头和树莓派专用摄像头RaspiCamera图像...
- 使用TaskManager爬取2万条代理IP实现自动投票功能
- css如何自动换行对于div,p等块级元素(转)
- Struts2教程2:处理一个form多个submit
- linux清空文件内容
- git 常用操作总结
- Android性能调优篇之探索垃圾回收机制
- ViewPager Indicator的使用方法
- 夺命雷公狗---微信开发57----微网站之jquery_mobile之入门案例
- 04、数据绑定控件 ListBox 的一个 Bug