摄影将光转化为比特信息。
概论
为了从相机得到一个图像,我们需要创建一个 AVCaptureStillImageOutput 对象。然后,我们可以使用 captureStillImageAsynchronouslyFromConnection: completionHandler: 方法。它的 handler 是以一个 CMSampleBufferRef 类型为参数的 block。我们可以利用 AVCaptureStillImageOutput 中的类方法 jpegStillImageNSDataRepresentation: 将其转换为一个 NSData 对象, 接着,我们使用 imageWithData:来得到一个 UIImage。
我们可以有许多参数可以调整,例如曝光控制或聚焦设定,光补偿,闪光灯,甚至 ISO 设置 (仅 iOS 8)。设置会被应用到一个 AVCaptureDevice,这个对象代表着一个存在于设备上的相机。
当 app 首次运行时,第一次调用 AVCaptureDeviceInput.deviceInputWithDevice() 会触发系统提示,向用户请求访问相机。这在 iOS 7 的时候只有部分国家会有,到了 iOS 8 拓展到了所有地区。除非得到用户同意,否则相机的输入会一直是一个黑色画面的数据流。日本用户的设备相机是不允许静音处理(据说国家防偷拍设置的政策)
显示
- AVCaptureVideoPreviewLayer 会自动地显示来自相机的输出。当我们需要将实时预览图上的点击转换到设备的坐标系统中
- 从输出数据流捕捉单一的图像帧,并使用 OpenGL 手动地把它们显示在 view 上。可以对实时预览图进行操作或使用滤镜
CAEAGLLayer是Core Animation提供的标准层类之一。CAEAGLLayer会与一个OpenGL ES的帧缓存共享它的像素颜色仓库
Color and Color Spaces
UI 设计师会标注给开发颜色值信息,我们应用方式:
Xib or StoryBoard,确认勾选 DeviceRGB,出现色差核对系统测色计 DigitalColor Meter (sRGB (which stands for standard RGB));
CGColorSpaceCreateDeviceRGB();
CGColorSpaceCreateWithName;(generic color space)
结构框架
UIImagePickerController
AssetsLibrary
PhotoKit IOS 8.0
Core Image 图像处理(CIContext,CIImage,CIFilter)
Core Image 是用来最大化利用其所运行之上的硬件的。每个滤镜实际上的实现,即内核,是由一个 GLSL (即 OpenGL 的着色语言) 的子集来书写的。当多个滤镜连接成一个滤镜图表,Core Image 便把内核串在一起来构建一个可在 GPU 上运行的高效程序。
VImage 存在于 Accelerate.frameWork ,数字信号处理,图像相关的向量矩阵(性能问题)
CGImage CIImage
CGImage是用搜索来重绘图形的类,应用时是按照图像的像素矩阵来绘制图片的,可以用来处理bitmap。
一个CIImage是一个不变的对象,代表一个图像但它不是一个图像。它只有与它相关的图像数据。它拥有产生图像所必需的所有信息。
A CGImage can only represent bitmaps
高级处理
- 混合方式 drawInRect:blendMode:alpha:
- 加载方式 imageNamed: imageWithContentOfFile
- 混合模式 kCGBlendModeNormal
- 滤镜处理 (ImageUtil) 色彩反转滤镜,剪裁滤镜
- 图片的饱和度,亮度,对比度