摘要: 效果如图目前旋转和锐化的界面还没做。编辑模块包含图片裁剪、旋转、锐化。一、点击美化图片首页【编辑】,进入具体操作界面 FWFunctionViewController *vc = [[FWFunctionViewController alloc] initWithImage:self.imag... 阅读全文
posted @ 2016-01-03 18:15 ForrestWoo 阅读(1383) 评论(1) 推荐(1) 编辑
摘要: 美图秀秀的智能优化界面十分简单明了,它只包含了一张要进行处理的图片和一个bar,再就是取消操作和保存操作的2个按钮,先附一张界面图一、点击美化图片首页【智能优化】,进入具体操作界面FWFunctionViewController *vc = [[FWFunctionViewController ... 阅读全文
posted @ 2016-01-02 15:48 ForrestWoo 阅读(2654) 评论(0) 推荐(2) 编辑
摘要: 本文从【增强】模块入手介绍一下界面设计和功能实现。所有功能都已实现,部分功能有待改善,我会在以后时间中步步改善。目前效果也很棒。有兴趣的可以在文章最后提供的下载链接中下载并运行。模拟器最好使用iphone6模拟器【增强】功能包含如下功能 1.亮度 2.对比度 3.色温 4.饱和度 5.... 阅读全文
posted @ 2016-01-01 02:41 ForrestWoo 阅读(2458) 评论(2) 推荐(0) 编辑
摘要: 先来2张预览图 基本实现了美图秀秀的美化图片功能的首页界面。美图秀秀据说是7.4亿用户在使用,感觉很牛逼的样子,这样更加我坚定了开发下去的决心。 美化图片具体功能: 1.智能优化 2.编辑 3.增强 4.特效 5.边框 6.魔幻笔 7.马赛克 8.文字编辑 9.背景虚化... 阅读全文
posted @ 2015-12-28 01:20 ForrestWoo 阅读(2254) 评论(2) 推荐(1) 编辑
摘要: 看着自己的博客感到由衷地吧悲伤,下面谈一下自己的人生。纯手机码字,呵呵。 个人介绍本人于2010年毕业于新疆职业大学【听父亲说西边好找工作,所以选择了新疆】,计算机网络技术。在上学期间喜欢上了编程,或许并不是喜欢吧,而是好奇开始学习编程,Java。毕业后找到了软件开发工作,但不是Java技术而... 阅读全文
posted @ 2015-12-25 16:26 ForrestWoo 阅读(1384) 评论(26) 推荐(7) 编辑
摘要: Masonry在此实现时候,并没有比NSLayoutConstraint简单,相反我觉得还不如NSLayoutConstraint。 [self.topView mas_makeConstraints:^(MASConstraintMaker *make) { make.to... 阅读全文
posted @ 2015-12-24 23:54 ForrestWoo 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 本文实现美图秀秀首页中的按钮,它包含3张图片和一个文本。通过开发按钮,我们可以学到iOS的自定义控件,绘制图片和文本的知识。【声明:本博客只能用作学习用途,不得用于商业用途,图片资源均来自官方,产生纠纷,本人不负责】效果如下图 关于绘制控件显示内容,我们需要使用CoreGraphics框架... 阅读全文
posted @ 2015-12-24 18:30 ForrestWoo 阅读(2071) 评论(0) 推荐(2) 编辑
摘要: 本文设计了美图秀秀官方版的界面,从中可以学到自定义View,自动布局,启动界面设置。代码有点凌乱,我在一步步改善。【声明:本博客只能用作学习用途,不得用于商业用途,图片资源均来自官方,产生纠纷,本人不负责】项目中的图片资源均来自官方版的下载包中的图片(原始图片),这样我们可以通过模仿成功案例来学... 阅读全文
posted @ 2015-12-24 00:42 ForrestWoo 阅读(4901) 评论(0) 推荐(5) 编辑
摘要: UIView *topView = [[UIView alloc] init]; topView.backgroundColor = [UIColor redColor]; [self.view addSubview:topView]; topView.translates... 阅读全文
posted @ 2015-12-22 00:41 ForrestWoo 阅读(359) 评论(0) 推荐(0) 编辑
摘要: AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法。以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸。使用AutoLayout的话,就变为了使用约束条件来定义view的位置和尺寸。这样的最大好处是一... 阅读全文
posted @ 2015-12-21 23:32 ForrestWoo 阅读(1281) 评论(0) 推荐(0) 编辑
摘要: Masonry是一个轻量级的布局框架,采用更好的语法封装自动布局,它有自己的布局DSL。简洁明了并具有高可读性 而且同时支持 iOS 和 Max OS X。 下载 NSLayoutConstraints的缺点 NSLayoutConstraints是一个强大且灵活的自动布局架构,可是通过代... 阅读全文
posted @ 2015-12-18 00:06 ForrestWoo 阅读(6200) 评论(1) 推荐(3) 编辑
摘要: UITouch 对象用于位置、 大小、 运动和一根手指在屏幕上为某一特定事件的力度。触摸的力度是从开始在 iOS 9 支持 3D 的触摸的设备上可用。你可以通过UIEvent对象传递给响应者对象访问。一个UITouch对象包括访问器: 引起触摸的视图或Window.@property(null... 阅读全文
posted @ 2015-12-17 15:35 ForrestWoo 阅读(2792) 评论(0) 推荐(0) 编辑
摘要: 该UIResponder类定义了响应和处理事件的对象接口。它是UIView和UIApplication的超类(UIWindow)。这些类的实例有时被称为响应者对象,简单地说就是响应者。 通常有2种事件类型,触摸事件和移动事件。 处理触摸事件的主要方法 1.touchesBegan:with... 阅读全文
posted @ 2015-12-17 01:29 ForrestWoo 阅读(1112) 评论(0) 推荐(0) 编辑
摘要: NSProxy类在分布式对象架构中是很重要的。由于作用比较特别,NSProxy在Cocoa程序中出现频率很低。 NSProxy 是一个抽象类,它为一些表现的像是其它对象替身或者并不存在的对象定义一套API。一般的,发送给代理的消息被转发给一个真实的对象或者代理本身load(或者将本身转换成)一... 阅读全文
posted @ 2015-12-11 15:12 ForrestWoo 阅读(2736) 评论(0) 推荐(0) 编辑
摘要: NSObject是大多数Objective-C类的继承的根类;它没有父类。通过NSObject,其它类继承了一些基础的与Objective-C语言编译器系统之间的接口,并且获得了在它的实例中表现为一个对象的能力。 尽管NSObject不是一个严格的抽象类,实际上它已经是一个类。但是通过它自己一... 阅读全文
posted @ 2015-12-10 22:46 ForrestWoo 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 很少有人会想到 Objective-C 历史悠久,并且它实际上影响了很多其他的编程技术。比如, Java 编程语言和 Objective-C 就有很多共同点。原因就是在 Objective-C 的早期,NeXT 和 Sun Microsystems 合作开发 OpenStep 平台,他们用来开发... 阅读全文
posted @ 2015-12-09 23:57 ForrestWoo 阅读(2510) 评论(0) 推荐(1) 编辑
摘要: 虽然到目前为止最好的Objective-C 编码平台来自苹果公司,但它们绝不仅适用于苹果公司的平台。Objective-C 在Linux、BSD 甚至Windows 等其他平台都有相当久远的历史。根据具体需求,你会发现一些能很好地支持这些替代平台的开源社区。本章将简要介绍一些其他的平台,并告诉你... 阅读全文
posted @ 2015-12-09 15:53 ForrestWoo 阅读(1325) 评论(0) 推荐(1) 编辑
摘要: 前言 此文写给那些像我一样的屌丝程序员(呵呵,我现在从事的是最底层的工作了,但是不想放弃我的梦想) 说明基于VM10+Win7安装Mac OSX10.11 El Capitan 工具VMware-workstation-full-10虚拟机工具(VM11许多BUG,建议使用10版本)vmw... 阅读全文
posted @ 2015-11-29 18:07 ForrestWoo 阅读(34493) 评论(27) 推荐(9) 编辑
摘要: 此文提供了一下黑苹果安装的工具和教程 目的: 我写此文的目的是那些没有时间折腾的人,和那些不愿意折腾的而又屌丝的程序员说一句,黑苹果自己安装的话要饱经折磨,其实还不如在tb上花钱让那些商家给做,快又完美,时间就是金钱啊。 结局 近段时间因为在虚拟机下的mac太卡太卡了,所以试着安装了一下... 阅读全文
posted @ 2015-11-28 00:33 ForrestWoo 阅读(4758) 评论(5) 推荐(0) 编辑
摘要: 好不容易找到的Insta的经典滤镜源码,贴出来帮大家学习。//// IFImageFilter.m// InstaFilters//// Created by Di Wu on 2/28/12.// Copyright (c) 2012 twitter:@diwup. All right... 阅读全文
posted @ 2015-11-22 21:36 ForrestWoo 阅读(1900) 评论(2) 推荐(0) 编辑
摘要: 色阶是表示图像亮度强弱的指数标准,图像的色彩丰满度和精细度是由色阶决定的。在GPUImage中GPUImageLevelsFilter提供了此功能。 GPUImageLevelsFilter定义了修改红色,绿色,蓝色,和所有通道的方法,有效值范围时0.0-1.0之间,如果你想想像ps中那样,你... 阅读全文
posted @ 2015-11-21 14:58 ForrestWoo 阅读(2919) 评论(0) 推荐(0) 编辑
摘要: GPUImage中,提供了许多简单的的常用的滤镜。在上一篇文章讲了如何调节图像的亮度这片文章讲一下如何通过GPUImage调节图像的对比度,饱和度,曝光度,和白平衡(美图秀秀中的色温)。原图像 调整图像的对比度 GPUImageContrastFilter类提供了此功能。该类中有一个属性co... 阅读全文
posted @ 2015-11-20 23:24 ForrestWoo 阅读(5225) 评论(1) 推荐(3) 编辑
摘要: 今天来学习一下一个简单滤镜使用的流程,通过调节亮度滤镜来了解。先将GPUImage库导入到项目中,引入头文件"GPUImage.h" 一、创建亮度滤镜对象 GPUImageBrightnessFilter *filter = [[GPUImageBrightnessFilter allo... 阅读全文
posted @ 2015-11-20 16:31 ForrestWoo 阅读(8623) 评论(1) 推荐(1) 编辑
摘要: Uniform是变量类型的一种修饰符,是OpenGL ES 中被着色器中的常量值,使用存储各种着色器需要的数据,例如:转换矩阵、光照参数或者颜色。 uniform 的空间被顶点着色器和片段着色器分享。也就是说顶点着色器和片段着色器被链接到一起进入项目,它们分享同样的uniform。因此一个在顶... 阅读全文
posted @ 2015-11-17 00:39 ForrestWoo 阅读(11881) 评论(0) 推荐(0) 编辑
摘要: GPUImagePicture类静态图像处理操作,它可以是需要处理的静态图像,也可以是一张作为纹理使用的图片,调用向它发送processImage消息,进行图像滤镜处理。 方法 -(id)initWithURL:(NSURL *)url 说明:使用指定url的图片来初始化GPUImageP... 阅读全文
posted @ 2015-11-16 23:17 ForrestWoo 阅读(2643) 评论(0) 推荐(0) 编辑
摘要: GPUImageFilter类 方法 - (id)initWithVertexShaderFromString:(NSString *)vertexShaderString fragmentShaderFromString:(NSString *)fragmentShaderString 说明... 阅读全文
posted @ 2015-11-16 23:07 ForrestWoo 阅读(3185) 评论(0) 推荐(0) 编辑
摘要: GPUImageOutput类将静态图像纹理上传到OpenGL ES中,然后使用这些纹理去处理进程链中的下一个对象。它的子类可以获得滤镜处理后的图片功能。[本文讲的很少,由于有许多地方不清楚,以后会更新] 方法 - (void)setInputFramebufferForTarget:(id... 阅读全文
posted @ 2015-11-16 21:04 ForrestWoo 阅读(5165) 评论(0) 推荐(0) 编辑
摘要: GPUImageInput协议主要包含一些输入需要渲染目标的操作。 - (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex 说明:准备下一个要使用的新帧 - (void)setInputFr... 阅读全文
posted @ 2015-11-15 16:21 ForrestWoo 阅读(1428) 评论(0) 推荐(0) 编辑
摘要: GPUImageContext类,提供OpenGL ES基本环境,我们一般不会用到,所以讲的很简单。 属性 @property(readonly, nonatomic) dispatch_queue_t contextQueue 说明:创建一个context线程 描述:_contextQ... 阅读全文
posted @ 2015-11-15 00:15 ForrestWoo 阅读(2517) 评论(0) 推荐(0) 编辑
摘要: GPUImageFramebufferCache类负责管理GPUImageFramebuffer对象,是一个GPUImageFramebuffer对象的缓存。 方法 - (GPUImageFramebuffer *)fetchFramebufferForSize:(CGSize)frameb... 阅读全文
posted @ 2015-11-14 16:10 ForrestWoo 阅读(1888) 评论(1) 推荐(0) 编辑
摘要: GPUImageFramebuffer类用于管理帧缓冲对象,负责帧缓冲对象的创建和销毁,读取帧缓冲内容 属性 @property(readonly) CGSize size 说明:只读属性,在实现中,设置缓冲区的size @property(readonly)GPUTextureOpti... 阅读全文
posted @ 2015-11-14 10:04 ForrestWoo 阅读(4144) 评论(0) 推荐(0) 编辑
摘要: GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能。 属性 @property(readwrite, nonatomic) BOOL initialized 作用:该属性用于指示program的初始化工作是否成功,成功返回YES,... 阅读全文
posted @ 2015-11-14 00:24 ForrestWoo 阅读(3146) 评论(0) 推荐(0) 编辑
摘要: 我们可以使用帧缓冲对象来实现离屏渲染。帧缓冲对象支持下列操作 1.只使用OpenGL ES 函数创建帧缓冲区对象。 2.使用EGL context创建多个FBO。 3.创建离屏颜色、深度、模板渲染缓冲区和纹理,把它们绑定到帧缓冲区对象上。 4.通过多种缓冲区共享颜色、深度、模板缓冲区内容... 阅读全文
posted @ 2015-11-12 00:25 ForrestWoo 阅读(4171) 评论(1) 推荐(0) 编辑
摘要: 片段操作图 这篇文章将介绍从写入帧缓冲和读取帧缓冲的方式。 Buffers(缓冲) OpenGL ES支持三种缓冲: OpenGL ES •• Color buffer颜色缓冲 •• Depth buffer深度缓冲 •• Stencil buffer模板缓冲 创建缓冲区 ... 阅读全文
posted @ 2015-11-11 21:38 ForrestWoo 阅读(4623) 评论(0) 推荐(0) 编辑
摘要: Texture Filtering and Mipmapping 纹理过滤与多级纹理 前面我们已经讲了单个2D图像的2D纹理的介绍,这篇文章主要讲解多级纹理。纹理坐标是用于生成一个2D索引,当放大和缩小设置为GL_NEAREST时,将发生一个单一纹理将匹配到纹理坐标位置中,这是一个最近点的采样... 阅读全文
posted @ 2015-11-10 02:35 ForrestWoo 阅读(5222) 评论(0) 推荐(0) 编辑
摘要: 本文流程 1.Texturing基础 2.装载Texturing和mipmapping 3.纹理过滤和包装 4.Texture level-of-detail, swizzles, and depth comparison 3D 图像渲染最基础的操作是使用纹理,它经典应用是坐标系应用在图像... 阅读全文
posted @ 2015-11-07 23:26 ForrestWoo 阅读(4323) 评论(0) 推荐(0) 编辑
摘要: 顶点数据,也称为顶点属性,指每一个顶点数据。指能被用来描述每个顶点的数据,或能被所有顶点使用的常量值。例如你想绘制一个具有颜色的立方体三角形。你指定一个恒定的值用于三角形的所有三个顶点颜色。但三角形的三个顶点位置是不同的,你需要指定一个顶点矩阵存储三个位置值。指定顶点属性数据 顶点属性数据可以... 阅读全文
posted @ 2015-11-06 01:28 ForrestWoo 阅读(2024) 评论(0) 推荐(0) 编辑
摘要: 每个OpenGL ES 3.0程序要求一个顶点着色器和一个片段着色器去渲染一个图形。着色器概念是API 的中心,本篇将介绍着色器语言部分包含下面几项 1、变量和变量类型 2、矢量和矩阵创建及选择 3、常量 4、结构和阵列 5、运算符、流控制和函数 6、属性、只读变量和变量 7、预处理和... 阅读全文
posted @ 2015-11-05 15:47 ForrestWoo 阅读(2987) 评论(0) 推荐(1) 编辑
摘要: 着色器对象和程序对象是使用着色器渲染的2种基本的对象类型。一个着色器对象可以当做是一个C编译器,而程序对象作为连接器。一个编译器生成目标代码(如.OBJ,.o文件),对象文件完成创建后,C连接器将该对象文件链接到最后程序。一个程序需要链接一个顶点着色器和片段着色器。 一般进程获取一个链接的着... 阅读全文
posted @ 2015-11-05 10:58 ForrestWoo 阅读(2948) 评论(0) 推荐(1) 编辑
摘要: 所谓顶点缓冲就是直接将顶点数据存储在gpu的一段缓冲区,不需要从cpu拷贝到gpu。提高了程序的运行效率。 操作步骤 1.创建顶点缓冲对象 GLuint vertexBufferID; 2.分配空间 glGenBuffers(1, &vertexBufferID); 3.绑定当前... 阅读全文
posted @ 2015-11-05 01:21 ForrestWoo 阅读(2074) 评论(1) 推荐(0) 编辑