服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - 在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

2020-12-30 13:33文顶顶 IOS

这篇文章主要介绍了在iOS开发的Quartz2D使用中实现图片剪切和截屏功能的方法,代码基于传统的Objective-C,需要的朋友可以参考下

图片剪切
一、使用quartz2d完成图片剪切
1.把图片显示在自定义的view中
先把图片绘制到view上。按照原始大小,把图片绘制到一个点上。
代码:

复制代码 代码如下:

- (void)drawrect:(cgrect)rect
{
    uiimage *image2=[uiimage imagenamed:@"me"];
    [image2 drawatpoint:cgpointmake(100, 100)];
}


显示:

 

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

2.剪切图片让图片圆形展示
思路:先画一个圆,让图片显示在圆的内部,超出的部分不显示。

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

注意:显示的范围只限于指定的剪切范围,无论往上下文中绘制什么东西,只要超出了这个范围的都不会显示。
代码:

复制代码 代码如下:

- (void)drawrect:(cgrect)rect
{
    //画圆,以便以后指定可以显示图片的范围
    //获取图形上下文
    cgcontextref ctx=uigraphicsgetcurrentcontext();
    cgcontextaddellipseinrect(ctx, cgrectmake(100, 100, 50, 50));
   
    //指定上下文中可以显示内容的范围就是圆的范围
    cgcontextclip(ctx);
    uiimage *image2=[uiimage imagenamed:@"me"];
    [image2 drawatpoint:cgpointmake(100, 100)];
}


显示:

 

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

3.剪切图片让图片三角形展示
代码:

复制代码 代码如下:


- (void)drawrect:(cgrect)rect
{

 

    //画三角形,以便以后指定可以显示图片的范围
    //获取图形上下文
    cgcontextref ctx=uigraphicsgetcurrentcontext();
//    cgcontextaddellipseinrect(ctx, cgrectmake(100, 100, 50, 50));
    cgcontextmovetopoint(ctx, 100, 100);
    cgcontextaddlinetopoint(ctx, 60, 150);
     cgcontextaddlinetopoint(ctx, 140, 150);
    cgcontextclosepath(ctx);
   
   
    //注意:指定范围(也就是指定剪切的方法一定要在绘制范围之前进行调用)
    //指定上下文中可以显示内容的范围就是圆的范围
    cgcontextclip(ctx);
    uiimage *image2=[uiimage imagenamed:@"me"];
    [image2 drawatpoint:cgpointmake(100, 100)];
}


显示:

 

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

截屏
一、简单说明

在程序开发中,有时候需要截取屏幕上的某一块内容,比如捕鱼达人游戏。如图:

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

二、代码示例

  storyboard界面搭建

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

代码:

复制代码 代码如下:


//
//  yyviewcontroller.m
//  01-截屏
//
//  created by apple on 14-6-12.
//  copyright (c) 2014年 itcase. all rights reserved.
//

 

#import "yyviewcontroller.h"
#import "mbprogresshud+nj.h"

@interface yyviewcontroller ()
@property (weak, nonatomic) iboutlet uiview *contentview;
- (ibaction)btnclick:(uibutton *)sender;

@end

 

复制代码 代码如下:


@implementation yyviewcontroller

 

- (void)viewdidload
{
    [super viewdidload];
}

- (ibaction)btnclick:(uibutton *)sender {
   
    //延迟两秒保存
    dispatch_after(dispatch_time(dispatch_time_now, (int64_t)(2.0 * nsec_per_sec)), dispatch_get_main_queue(), ^{
        //获取图形上下文
        //    uigraphicsbeginimagecontext(self.view.frame.size);
        uigraphicsbeginimagecontext(self.contentview.frame.size);
        //将view绘制到图形上下文中
       
        //    [self.view.layer renderincontext:uigraphicsgetcurrentcontext()];
        [self.contentview.layer renderincontext:uigraphicsgetcurrentcontext()];
    
       
        //将截屏保存到相册
        uiimage *newimage=uigraphicsgetimagefromcurrentimagecontext();
       
        uiimagewritetosavedphotosalbum(newimage,self, @selector(image:didfinishsavingwitherror:contextinfo:), nil);
    });
}

 - (void)image:(uiimage *)image didfinishsavingwitherror:(nserror *)error contextinfo:(void *)contextinfo
{
    if (error) {
        [mbprogresshud showerror:@"保存失败,请检查是否拥有相关的权限"];
    }else
    {
//        [mbprogresshud showmessage:@"保存成功!"];
        [mbprogresshud showsuccess:@"保存成功!"];
    }
}

@end


把截取的图片保存到手机的相册中:

 

在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

说明:把整个屏幕画到一张图片里
1.创建一个bitmap的上下文
2.将屏幕绘制带上下文中
3.从上下文中取出绘制好的图片
4.保存图片到相册
补充:把图片写入到文件的代码

复制代码 代码如下:

//3.从上下文中取出绘制好的图片
     uiimage *newimage = uigraphicsgetimagefromcurrentimagecontext();
    
     nsdata *data = uiimagepngrepresentation(newimage);
    
     nsstring *path = [[nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject] stringbyappendingpathcomponent:@"abc.png"];
     nslog(@"%@", path);
     [data writetofile:path atomically:yes];


三、补充
保存成功和保存失败之后应该做些事情?
系统推荐的方法:

复制代码 代码如下:

- (void)image:(uiimage *)image didfinishsavingwitherror:(nserror *)error contextinfo:(void *)contextinfo
{
    if (error) {
        [mbprogresshud showerror:@"保存失败,请检查是否拥有相关的权限"];
    }else
    {
//        [mbprogresshud showmessage:@"保存成功!"];
        [mbprogresshud showsuccess:@"保存成功!"];
    }
}


如果图片成功保存的话,那么就提示保存成功。
如果保存失败,那么提示失败
提示:保存失败常见有两个原因:1是内存不够,2是手机内部的权限不允许。
说明:如果当一个应用程序想要访问通讯录或相册,用户已经明确拒绝过,那么以后再要访问的话会直接拒绝。这个时候,可以提示用户去开启权限。

延伸 · 阅读

精彩推荐
  • IOSiOS自定义UICollectionViewFlowLayout实现图片浏览效果

    iOS自定义UICollectionViewFlowLayout实现图片浏览效果

    这篇文章主要介绍了iOS自定义UICollectionViewFlowLayout实现图片浏览效果的相关资料,需要的朋友可以参考下...

    jiangamh8882021-01-11
  • IOSiOS实现控制屏幕常亮不变暗的方法示例

    iOS实现控制屏幕常亮不变暗的方法示例

    最近在工作中遇到了要将iOS屏幕保持常亮的需求,所以下面这篇文章主要给大家介绍了关于利用iOS如何实现控制屏幕常亮不变暗的方法,文中给出了详细的...

    随风13332021-04-02
  • IOSiOS中UILabel实现长按复制功能实例代码

    iOS中UILabel实现长按复制功能实例代码

    在iOS开发过程中,有时候会用到UILabel展示的内容,那么就设计到点击UILabel复制它上面展示的内容的功能,也就是Label长按复制功能,下面这篇文章主要给大...

    devilx12792021-04-02
  • IOSiOS中MD5加密算法的介绍和使用

    iOS中MD5加密算法的介绍和使用

    MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。对输入信息生成唯一的128位散列值(32个字符)。这篇文...

    LYSNote5432021-02-04
  • IOS详解iOS中多个网络请求的同步问题总结

    详解iOS中多个网络请求的同步问题总结

    这篇文章主要介绍了详解iOS中多个网络请求的同步问题总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    liang199111302021-03-15
  • IOSiOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)

    iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和

    这篇文章主要介绍了iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)的相关资料,需要的朋友可以参考下...

    CodingFire13652021-02-26
  • IOSiOS开发之视图切换

    iOS开发之视图切换

    在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单。在iOS开发中常用的视图切换有三种,今天我们将...

    执着丶执念5272021-01-16
  • IOSiOS开发技巧之状态栏字体颜色的设置方法

    iOS开发技巧之状态栏字体颜色的设置方法

    有时候我们需要根据不同的背景修改状态栏字体的颜色,下面这篇文章主要给大家介绍了关于iOS开发技巧之状态栏字体颜色的设置方法,文中通过示例代码...

    梦想家-mxj8922021-05-10