Metal每日分享,调整曝光滤镜效果

简介: Metal每日分享,调整曝光滤镜效果

Demo


HarbethDemo地址

iDay每日分享文档地址


实操代码


// 调整曝光效果
let filter = C7Exposure.init(exposure: 0.25)
// 方案1:
ImageView.image = try? BoxxIO(element: originImage, filters: [filter, filter2, filter3]).output()
// 方案2:
ImageView.image = originImage.filtering(filter, filter2, filter3)
// 方案3:
ImageView.image = originImage ->> filter ->> filter2 ->> filter3


效果对比图


不同参数下曝光效果

-2.5 0.25 0.5

1.png

1.png

1.png


实现原理


过滤器

这款滤镜采用并行计算编码器设计.compute(kernel: "C7Exposure"),参数因子[exposure]

对外开放参数

exposure: 调整后的曝光率,从-10.0到10.0,默认值为0.0;

/// 曝光效果
public struct C7Exposure: C7FilterProtocol {
    public static let range: ParameterRange<Float, Self> = .init(min: -10.0, max: 10.0, value: 0.0)
    /// The adjusted exposure, from -10.0 to 10.0, with a default of 0.0
    public var exposure: Float = range.value
    public var modifier: Modifier {
        return .compute(kernel: "C7Exposure")
    }
    public var factors: [Float] {
        return [exposure]
    }
    public init(exposure: Float = range.value) {
        self.exposure = exposure
    }
}

着色器

曝光度pow(2.0, *exposure)次方运算,然后再对每个像素颜色使用;

kernel void C7Exposure(texture2d<half, access::write> outputTexture [[texture(0)]],
                       texture2d<half, access::read> inputTexture [[texture(1)]],
                       device float *exposure [[buffer(0)]],
                       uint2 grid [[thread_position_in_grid]]) {
    const half4 inColor = inputTexture.read(grid);
    const half4 outColor = half4((inColor.rgb * pow(2.0, *exposure)), inColor.a);
    outputTexture.write(outColor, grid);
}


Harbeth功能清单


支持ios系统和macOS系统

支持运算符函数式操作

支持多种模式数据源 UIImage, CIImage, CGImage, CMSampleBuffer, CVPixelBuffer.

支持快速设计滤镜

支持合并多种滤镜效果

支持输出源的快速扩展

支持相机采集特效

支持视频添加滤镜特效

支持矩阵卷积

支持使用系统 MetalPerformanceShaders.

支持兼容 CoreImage.

滤镜部分大致分为以下几个模块:

Blend:图像融合技术

Blur:模糊效果

Pixel:图像的基本像素颜色处理

Effect:效果处理

Lookup:查找表过滤器

Matrix: 矩阵卷积滤波器

Shape:图像形状大小相关

Visual: 视觉动态特效

MPS: 系统 MetalPerformanceShaders.


最后


慢慢再补充其他相关滤镜,喜欢就给我点个星🌟吧。

滤镜Demo地址,目前包含100+种滤镜,同时也支持CoreImage混合使用。

再附上一个开发加速库KJCategoriesDemo地址

再附上一个网络基础库RxNetworksDemo地址

喜欢的老板们可以点个星🌟,谢谢各位老板!!!✌️.

相关文章
|
机器学习/深度学习 传感器 前端开发
Bootstrap区间预测 | Matlab Bootstrap区间预测 为您的点预测提供置信区间
Bootstrap区间预测 | Matlab Bootstrap区间预测 为您的点预测提供置信区间
|
消息中间件 Kafka 程序员
kafka的Docker镜像使用说明(wurstmeister/kafka)
wurstmeister/kafka是镜像市场上很受欢迎的一个kafka镜像,今天来聊聊它的多种用法
6553 0
kafka的Docker镜像使用说明(wurstmeister/kafka)
|
11月前
什么叫高内聚,低耦合 超简单生活例子,让你一看就明白
本文通过生活化的例子解释了高内聚和低耦合的概念,强调了在编写代码时应该追求高内聚(相关功能紧密组合)和低耦合(功能间相互独立,减少相互影响),以提高代码质量和可维护性。
768 0
|
11月前
|
Web App开发 Java 测试技术
使用selenium+chromedriver+xpath爬取动态加载信息(一)
使用selenium+chromedriver+xpath爬取动态加载信息(一)
247 1
|
Java Python
HuTool工具类实用技巧:从常用方法入手
HuTool工具类实用技巧:从常用方法入手
483 0
|
应用服务中间件 Linux nginx
Docker Compose 安装与使用(常用指令)
Docker Compose 安装与使用(常用指令)
642 0
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
358 0
|
消息中间件 监控 数据库
Django的异步任务处理:提升应用响应速度与性能
【4月更文挑战第15天】Django通过集成Celery实现异步任务处理,提升Web应用性能和响应速度。异步处理用于耗时操作如数据库操作、邮件发送。基本步骤包括安装配置Celery、创建任务、在视图中调用任务并启动worker。应用场景包括发送通知、处理复杂逻辑和数据导入导出。注意任务原子性、优先级设置和任务执行监控。
|
运维 小程序 API
STM32实战项目—WIFI远程开关灯
本文介绍了如何利用正点原子ESP8266和STM32F103C8T6连接腾讯云,利用舵机实现远程开关灯。给出了详细的腾讯云配置和调试步骤,给出了部分程序设计。
529 1
STM32实战项目—WIFI远程开关灯
|
存储 数据库
Gson (自定义转化器) 日期转换异常:Caused by: java.text.ParseException: Failed to parse date
Gson (自定义转化器) 日期转换异常:Caused by: java.text.ParseException: Failed to parse date
367 0