iOS 绘图之drawImage

作者:Love@YR
链接:http://blog.csdn.net/jingqiu880905/article/details/51852382
请尊重原创,谢谢!

上一篇文章里说的绘图都是非常简单的,如画直线,画贝塞尔曲线,画圆,椭圆,描边,填充等。
这篇针对图片的简单处理做个说明:
demo还是上篇的那个,不过ViewController让其显示DrawedImageView的view。
1.利用 UIImage 的 drawInRect方法绘图。

因为 UIImage 的 drawInRect属于UIKit提供的绘图,所以在image加入的view的drawRect里不需要UIGraphicsGetCurrentContext来拿到cg上下文

drawInRect,drawAtPoint方法都会重新把这个图片拷贝一份绘制到view上。所以调用几次就有几张图,并没有new多个img对象但效果显示有多个图片,当然最后我们生成的相当于这些图在整个画布上的一个整体截图。
2. drawAsPatternInRect:rect 平铺,即图片sizeToFit(即图片本身px/scale系数)显示,如果还有空间,复制其自己,横向和竖向排列。
3. 上面用UIImage自身的绘画方式并不能分割图片,只有把图片转换成CGImageRef才能进行分割。CGImage类属于CoreGraphics框架,而CIImage类属于CoreImage框架。到现在为止我们还未讨论过CoreImage框架。
用[uiimageObj CGImage]即可得到此图片的CGImageRef

  CGImageRef marsLeft = CGImageCreateWithImageInRect([mars CGImage],CGRectMake(0,0,sz.width/2.0,sz.height));
    CGImageRef marsRight = CGImageCreateWithImageInRect([mars CGImage],CGRectMake(sz.width/2.0,0,sz.width/2.0,sz.height));

即可把一个CGImage按照想要的rect分割成多个。
4. 要把CGImage绘制在view上需要用CGContextDrawImage(ctx,rect,cgimgRef)方法,此动作如在drawRect里,ctx就需要用UIGraphicsGetCurrentContext得到。
5. CGImageCreate 用完后需要手动release
6. CGImageGetWidth 可以拿到CGImageRef的真实尺寸。而uiimageObj的size是被系统压缩后的尺寸,相当于调用了sizeToFit之后的尺寸而不是图片原大小。
7. UIImage 的imageWithCGImage:cgImage scale:scale orientation:orientation方法传入一个cgImag得到一个uiimage对象,可以自动修复图片倒置的问题,还有压缩的问题。因为cgImag为原图大小,按照uiimage的scale去压缩,得出来的uiimage的size才会显示正确。
8. 关于使用CGContextDrawImage绘制图片倒置的问题解决办法:
http://blog.csdn.net/ouyangtianhan/article/details/44225621

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值