Core Image提供了编写自定义filter的支持。 自定义filter是你为其编写方法(称为内核)的filter,该过程指定要对每个源图像像素执行的计算。 如果你打算使用内置的Core Image filter,无论是本体还是继承它们,你都不需要阅读本文。 如果你打算编写自定义filter,则应阅读本章,以便了解自定义filter中的处理路径和组件。 如果你有意打包自定义filter进行分发,你还应该阅读Packaging and Loading Image Units。
点我阅读全文...Author: 中指先生
接下来介绍如何继承一个 CIFilter,实现自定义效果。在继承CIFilter前先介绍两个内置的filter——Face Detecting 和 Auto Enhancing Images。
点我阅读全文...Core Image是一种用来为定格图片和视频图片提供近乎实时处理和分析的技术。它从 Core Graphic,Core Video和Image IO framework中操作各种图片数据类型,可以使用GPU和CPU的绘制路径。Core Image 隐藏了底层的图像处理,而提供了方便使用的编程接口API。你不需要知道OpenGL,OpenGL ES或者Metal影响GPU能力的细节,你也不需要了解GCD多核处理的优点。因为Core Image负责处理这些事情。
点我阅读全文...AVFoundation 是可以用来播放和创建基于时间的视听媒体的几个framework之一。它提供了OC接口来处理基于时间的视听数据。比如,你可以使用AVFoundation来测试,创建,编辑或者重新编发媒体文件,你也可以从设备拿到输入流,并在实时捕捉和回放过程中操作视频。
点我阅读全文...OC语言能在从编译时、连接时到运行时推迟许多决策。尽可能的,语言动态执行。这意味着语言不仅仅需要一个编译器,而且需要一个运行时系统来执行编译的代码。运行时系统扮演了一个OC的操作系统角色,让语言正常运行。 下面深入介绍NSObject class和OC程序如何与运行时交互,也介绍关于如何动态加载新class和对其他对象的消息转发,也提供关于在程序运行时如何找到队形的信息。
点我阅读全文...全局命名空间中的元素(例如类,函数和全局变量)应该都具有唯一的名称。 虽然两级命名空间可帮助dynamic linker在运行时找到正确的符号,但该功能不会防止由于多重定义的符号而出现静态链接错误。 例如,假设两个不同的Framework 定义了一个具有相同名称的符号。 如果你要创建一个包含这两个Framework 的项目,那么如果引用了相关符号,则会遇到静态链接错误。 静态链接器负责选择使用哪个Framework ,然后生成dynamic linker所需的两级命名空间提示。 因为两个Framework 都定义了符号,所以静态链接器不能选择并生成错误。
点我阅读全文...OS X作为桌面操作系统,大量使用framework来分发共享代码和资源。framework是一个层级目录,包含了共享的资源的单个包package,比如一个动态共享库,nib文件,image文件,localized string 文件,header文件和引用文档。多个app可以同时访问这些资源。系统按需要加载这些资源到内存,共享一份资源的copy给需要的app。 framework也是一个捆绑包,它的内容可以使用Core Foundation Bundle服务或Cocoa NSBundle类来访问。但是,与大多数bundle不同,framework bundle不会作为不透明文件出现在Finder中。 framework bundle是用户可以导航的标准目录。 这使得开发人员可以更轻松地浏览框架内容并查看任何包含的文档和头文件。
点我阅读全文...Bundle时macOS和iOS的基础架构技术,用于封装代码和资源。bundle通过提供需要资源的已知位置的方式, 简化了开发者需要创建组合二进制文件的工作。bundles使用目录和文件提供更自然的组织类型——一种可以被在开发时和发布时都能修改的类型。 为了支持bundle,Cocoa和Core Foundation 提供了编程接口来访问bundles的内容。因为bundle使用一个有组织的结构,所有developer 理解bundle的基本组织规划是重点。
点我阅读全文...接上文。本文主要包括 如何构建一个layer 的层次结构 / 高级动画的操作 / 如何改变layer的默认行为 / 如何提升动画性能
点我阅读全文...PS: 太长了,分成两部整理。上半部是 Core Animation基础知识/如何设置 layer object/如何配置基本的动画 核心动画(Core Animation)是一种在iOS和OSX上都可用的图形渲染和动画的基础框架,你可以使用它来让view和其他虚拟元素具有动画特效。Core Animation替你完成了大部分的动画的绘制每帧的工作。你需要做的是配置一些动画参数(比如开始点和结束点)、通知Core Animation启动它。Core Animation负责鱼虾的工作,处理大部分实际的绘制工作到图形硬件来加速绘制。这个自动图形加速具有高帧率(frame rate)和柔和动态效果,并且不会加重CPU的负担拖慢你的app。
点我阅读全文...关于Core Text Core Text 是一个高级,底层的布局文字和处理字体的技术。布局文字指通过字符编码和字体数据生成字形,然后在graph runs里控制他们的位置。他让graph runs在line中排列,然后把lines排列进multiline frames(比如一段文字)。Core Text 还提供字形和布局相关的数据,如字形位置和线条和框架的度量。它处理字符属性和段落样式,包括各种类型的标签样式和定位。 Core Text API提供了关于fonts, font collections, font descriptors,便捷的访问font 数据。
点我阅读全文...UIKit提供app的文字和网页对象,可以直接使用UItextView,TextField,Label。当用户编辑文字时,app必须管理键盘。当用户点击textfile,textview或者网页上的表单,iOS动态弹出键盘到视图。App可以直接绘制和管理文字。UIkit的底层text view是一个强大的布局引擎——Text Kit. 如果你需要定制布局过程或者需要干预这个过程的行为,你可以使用Text Kit。Text Kit是一组类和协议,提供了高质量的排版服务,允许app用所有良好的排版设置来存储,布局,显示文字。比如:kerning, ligatures, line breaking, and justification.
对于大多数app来说,你可以使用high-level 文字显示类和text kit来处理所有文字场景。对于需要定制解决方案的少数文本和特殊需求,可以使用底层技术,例如Core Text,Core Graphics和Core Animation框架中的编程接口以及UIKit中的其他API。
要直接与iOS的文本输入系统通信,请实现UITextInput协议以及相关的协议和类。您的应用程序还可以使用拼写检查和正则表达式的技术。
你的应用程序具有一系列用于输入和编辑数据的选项。UIKit框架包含编程接口,用于编辑视图中的数据并将数据输入到应用程序中。自定义输入视图可以替换系统键盘以允许输入特殊数据;输入附件视图是系统键盘(或自定义输入视图)上方的自定义视图,可使用户以特定于应用程序的方式影响编辑的数据。通过使用UIPasteboard和相关类,应用程序可以在自己的不同位置或与其他应用程序之间复制,剪切和粘贴数据。作为复制粘贴操作的一部分,用户在上下文编辑菜单上点击命令;你的应用程序管理这个菜单,并可以添加自定义命令。
点我阅读全文...Foundation提供了一个编程架构来传递有关事件发生的信息。这个架构本质上是对于不同线程之间传递消息,事件处理的封装,依赖于run loop运行机制,通过run loop mode传递事件,通过runloop的observer回调处理事件。
点我阅读全文...Image I / O编程接口允许应用程序读取和写入大多数图像文件格式。最初是Core Graphics框架的一部分,Image I / O驻留在它自己的框架中,允许开发人员独立于Core Graphics(Quartz 2D)使用它。 Image I / O提供了访问图像数据的明确方式,因为它非常高效,可以轻松访问元数据并提供颜色管理。image IO和 Bitmap images and image masks 绘制文档笔记 的图片绘制相关。
点我阅读全文...bitmap image和image mask的绘制是quartz 2d的传统项目。images和image masks在quartz里的表达是CGImageRef数据类型。有非常多可以用于创建image的方法。其中一些需要数据提供者或图像源来提供位图数据。其他功能通过复制图像或对图像执行操作来从现有图像创建图像。无论您如何在Quartz中创建位图图像,都可以将图像绘制为任何图形上下文。请记住,位图图像是以特定分辨率的位数组。如果您将位图图像绘制为与分辨率无关的图形上下文(例如PDF图形上下文),则位图会受到您创建分辨率的限制。
点我阅读全文...