David'Blog


  • 首页

  • 标签

  • 分类

  • 归档

滤镜Shader——LookUpTable

发表于 2019-08-03 | 分类于 图像处理
Look Up Table(简称LUT,颜色查找表)是一种降低GPU运算量的技术,通过事先将颜色值存储在一张缓存表中当需要运算的时候直接从这张表中索引出对应的颜色值,本质上可看做计算机领域常见的存储空间换运算时间的算法应用,这项技术常用于图像调色领域。 LUT被分为1D/3D,它们的本质区别在于索引输出值所需的索引数。最简单的LUT由单个变量索引,因此称为一维(或1D)LUT。可以看做是一个f(x ...
阅读全文 »

Objective-C的运行时Runtime

发表于 2019-07-27 | 分类于 工作原理
Objective-C Runtime顾名思义就是Objective-C的一个运行时库,它提供对Objective-C语言的动态特性的支持。 我们知道在比如C/C++/Swift这种静态语言一大特征就是在编译阶段就确定了对象的结构,而动态语言则在运行时还能够修改对象的结构,其中Objective-C正是利用Runtime这个技术来表现它的动态特性。 可以说Runtime是整个Objective-C ...
阅读全文 »

iOS调试和性能优化技巧

发表于 2019-07-02 | 分类于 工程上的二三事
WWDC2019-Session-417专门讨论如何利用Metrics来进行性能监控和优化,对于我们开发者显然是一个重大利好。Metrics涵盖了整个App开发的完整流程: XCTest Metrics (开发和测试阶段) MetricsKit (内测阶段和线上阶段) Xcode Metrics Organizer (线上阶段) 对于性能监控和优化这个主题上今年推出的MetricKit聚焦于两 ...
阅读全文 »

Cocoapods实现私有库开发和二进制发布

发表于 2019-06-14 | 分类于 工程上的二三事
近期接到了个需求,要实现一个组件项目在开发时候实现自动输出Framework。即这个项目实际上是一个基于Podspec的组件私有库,开发的时候只有部分同学可以访问私有库的源码,而最后以Framework的形式输出给其他人。 这是Demo传送链接 Cocoapods注入脚本为了实现以上的需求,最先想到的就是希望在每次构建结束后利用脚本来自动化这个功能。经过一番查询,在Cococapods中发现果然可 ...
阅读全文 »

iOS逆向工程三板斧:砸壳-注入-重签

发表于 2019-06-10 | 分类于 工程上的二三事
这里从原理上如何实现iOS的逆向工程的,以及如何从工程化的角度去实现逆向一个iPA。在我看来整体的流程上就三个步骤:砸壳->注入->重签安装。 砸壳从AppStore上(官方渠道)分发的ipa包都是经过加密的,逆向的第一步就是对这个应用进行解密。不过在现如今,实施这个过程的前提条件: 一台越狱iOS设备 一条命令实现dump砸壳应用,Frida-ios-dump一键砸壳菜鸡版 照着 ...
阅读全文 »

滤镜Shader——像素卷积变换

发表于 2019-05-20 | 分类于 图像处理
像素卷积变换,常见的滤镜效果包括边缘检测、高斯模糊、锐化等。从我的理解上卷积就是一种数学运算,它运用在图像处理中可以让不同的图像滤波器通过卷积运算而获得相应的滤波效果。 接下来详细学习一下卷积的概念以及如何通过它实现几个滤镜效果,这里代码部分就使用之前编写的Metal滤镜处理框架。 卷积运算 数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的 ...
阅读全文 »

OpenGL学习——再探坐标系与矩阵

发表于 2019-04-06 | 分类于 图像处理
之前在这篇文章学习了如何在OpenGL中是如何构建一个空间描述物体的信息而又是如何投射到渲染屏幕上的过程。 OpenGL采用的是相机模型,就是把视图变换操作类比为使用照相机拍摄照片的过程,具体步骤如下:1.将准备拍摄的对象移动到场景中指定位置。(模型变换,Model Transform)2.将相机移动到准备拍摄的位置,将它对准某个方向。(视图变换,View Transform)3.设置相机的焦距 ...
阅读全文 »

滤镜Shader——独立像素点变换

发表于 2019-03-24 | 分类于 图像处理
独立像素点变换,它是针对单个像素点的操作,常见的效果包括亮度、对比、饱和度、色调等。 在之前学习OpenGL的时候已经实现和描述了这几个效果滤镜OpenGL简单滤镜,这里就不在展开介绍了,接下来让我们用Metal实现一下上述的效果。 Metal实现的滤镜处理框架——MetalImage 饱和度1234567891011121314151617181920212223#include <met ...
阅读全文 »

C++中存在的头文件类/函数完整实现

发表于 2019-03-16 | 分类于 工程上的二三事
在Tecent/Mars开源工程中我们用到它Comm模块部分的代码,其中这部分代码都是一些C++头文件实现代码。同时它的类命名也未尝有命名空间,这里对此产生了两个疑惑:1.在头文件中实现一个无命名空间的类会有命名冲突吗?2.这种写法的原理是什么? Tecent/Mars工程 在查阅了一些资料后认为应该是跟C++中头文件进行类/函数定义有关,接下来就学习一下相关的概念。 内联函数的基本含义 在计算机 ...
阅读全文 »

Metal学习——Metal着色器语言(MSL)(一)

发表于 2019-01-16 | 分类于 框架学习
前面学习了Metal框架的基本组成和运行方式,知道了要如何科学使用的它。然而我们最终的目的还是要使用这套框架来优雅的操作GPU单元进行图像处理,也就回到了Shader的编写上了。 我们知道OpenGL的Shader编写语言GLSL的语法上是非常类似C的,而Metal的Shader编写语言MSL则是直接基于C++14实现的一个子集。 Metal Shading Language官方文档文档中通过7个 ...
阅读全文 »
1234

David Dai

31 日志
4 分类
7 标签
© 2020 David Dai
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4