美文网首页
位图上下文

位图上下文

作者: 彼岸的黑色曼陀罗 | 来源:发表于2016-09-13 19:29 被阅读0次

    位图上下文

    • 怎么让方形图片变成圆形图片?
    • 位图上下文
      • 生成了一张新的图片
      • 应用:水印、圆形图片裁剪
      • 手动开启上下文,指定上下文的大小
      • 创建时上下文的大小,决定着生成图片的大小

    水印

    • 位图上下文的大小 = 图片的大小

    • 加水印:生成一张新的图片

    • 注意:生成图片不是在view上画东西了,不用自定义view,不用写drawRect方法;生成图片可以在任何地方生成。

    • 生成一张新的图片

    • 加载图片

    • 要绘制的文字

    • 开启位图上下文

      • 开启上下文UIGraphicsBeginImageContext
      • 创建时上下文的大小决定着生成图片的大小
    • 把图片会知道上下文当中

      • drawAtPoint/drawInRect
    • 画文字

      • drawAtPoint:withAttribute:
    • 从上下文当中生成一张新的图片

      • UIGraphicsGetImageFromCurrentImageContext()
      • 把上下文当中所有绘制的内容合成到一起,生成一张新的图片
    • 手动关闭上下文

      • UIGraphicsEndImageContext()
    • 拖线,赋值

      • self.imageV.image = newImage;

    头像(生成圆形图片)

    • 加载图片
    • 开启位图上下文
      • UIGraphicsBeginImageContext
      • 位图上下文大小 = 图片大小
    • 裁剪(绘制之前做裁剪)
      • UIBezierPath OvalInRect
      • UIRectClip
    • 把路径设置为裁剪区域(超出裁剪区域以外的内容会自动裁剪掉)
      • [path addClip]
      • 对之前已经画上去的东西,没有作用
    • 把图片绘制到上下文当中
      • drawAtPoint
    • 从位图上下文当中生成一张图片
      • UIGraphicsGetImageFromCurrentImageContext()
    • 关闭位图上下文
      • UIGraphicsEndImageContext()
    • 拖线,展示
      • self.imageV.image = newImage;

    带有边框的圆形图片裁剪(抽一个分类方便复用)

    • 加载图片

    • 设置边框宽度

    • 开启位图上下文

      • 大小 = 图片的宽高 + 2倍图片边框的宽高
      • UIGraphicsBeginImageContext()
    • 绘制一个大圆

      • UIBezierPath OvalInRect
    • 把大圆画上去 path fill

    • 设置裁剪区域

      • UIBezierPath
        • x,y:边框宽度
        • 宽度高度 = 图片的宽高
    • 把路径设置为裁剪区域

      • addClip
    • 把图片绘制到上下文

    • 从位图上下文当中生成一张图片

      • UIGraphicsGetImageFromCurrentImageContext()
    • 关闭上下文

      • UIGraphicsEndImageContext()
    • 拖线,展示

      • self.imageV.image = newImage;
    • 抽一个分类,方便复用

      • 图片,边框大小,大圆的颜色是变化的
      • ObjectC-file
      • UIImage()
      • 把出现中文的,放到后面

    截屏(新的知识点:二进制流)

    • 生成一张新的图片
    • 创建一个位图上下文
      • 大小等于屏幕大小
    • 获取当前上下文
      • CGContextRef UIGraphicsGetCurrentContext
    • 把控制器的view内容画到上下文当中
      • view之所以能显示是因为内部有layer
      • self.view.layer renderInContext:
    • 从上下文当中生成一张新的图片
      • Get
    • 关闭上下文
      • End
    • 把手机生成的图片,生成到电脑的桌面上
      • 怎么把图片上传到服务器的?
      • 把图片转成二进制流
      • 如何把图片转成二进制流?
        • UIImage
        • 转成jpe还是png
        • UIImageJPERepresentation(newImage,压缩质量:范围0~1)
        • 返回值NSData
        • data writeToFile:atomically:
        • UIImagePNGRepresentation(本身就是最高质量的图片)

    截屏扩展

    • [UIScreen mainScreen].scale 不是固定的值,根据手机型号的不同值不同
      • 点坐标*比例 ——> 转成像素坐标
      • 在OC当中会自动把点坐标转成像素
      • 在C语言当中,它不会自动转成像素
    • 开启上下文
      • UIGraphicsBeginImageContextWithOptions(上下文大小,是否为不透明度opaque NO,scale缩放比例点坐标与像素的比例)
      • scale 1.0
      • scale 2.0 打印的size 和生成图片的size尺寸不一样
      • scale 0.0 设备的[UIScreen mainScreen].scale
      • scale 缩放因子 bitmap

    截图

    • 遮盖
    • 截图
    • 蒙版遮盖
      • 开始拖动的点
      • 当前手指的点
      • 宽高--x,y的偏移量
    • 添加手势Pan Gesture Recognizer
    • 监听拖动时会调用哪个方法,拖线,判断手势状态
      • state:Begin
        • 获取手指当前点:locationInView
        • 定义一个成员属性,方便下面拿到当前点
      • state:Change
        • locationInView
        • 宽度:x方向偏移量
        • 高度:y方向的偏移量
        • frame
          • startP.X
          • startP.y
          • w
          • h
      • 创建遮盖的view
        • 懒加载
        • 懒加载的好处:
          • 1.什么时候使用什么时候才去创建,节省内存
          • 2.保证对象只有一个
          • 3.保证该对象在使用时一直存在
      • state:End手指松开
        • 移除遮盖
    • 把超过遮盖以外的内容裁减掉
      • 生成一张和imageView一样大的图片
      • 开启上下文UIGraphicsBeginImageContext:默认是透明的
      • 裁剪:UIRectClip(遮盖的frame)
      • CGContextRef
      • renderInContext
      • 生成图片
      • 关闭上下文
      • self.imageV.image = newImage

    扩展

    • 手指松开,生成图片不是imageView大小
    • 把生成遮盖大小的图片,显示到桌面上面
    • 画图片,开启上下文,遮盖大小
    • 拿到图片,往上面画

    图片擦除(橡皮擦功能)

    • uerInteraction
    • 添加手势
      • Pan
    • 擦除区域
      • 获取当前手指的点locationInView
      • rectWH = 30
      • X:当前点x- 宽度的一半
      • Y:当前点y- 高度一半
    • 开启上下文Begin
    • 把图片内容画到画板上renderInContext
    • 擦除
      • CGContextClearRect(context,rect)
    • 生成一张图片Get
    • 关闭上下文End
    • 替换imageView

    相关文章

      网友评论

          本文标题:位图上下文

          本文链接:https://www.haomeiwen.com/subject/lyomettx.html