ios拼图游戏(一)之分割图片
来源:互联网 发布:剑三明教脸型数据 编辑:程序博客网 时间:2024/05/17 08:46
最近在学习ios开发,在学习了一些基本知识后,想动手开发一个拼图游戏,而要实现拼图效果,首先需要分割图片,以下为分割图片的代码
//裁剪图片的函数-(UIImage*)cutImageAtSquare:(UIImage*)image Frame:(CGRect)frame{ UIImage* piePic=nil; if(self){ //获取在_image图片的frame区域内的图片 CGImageRef imageRef=CGImageCreateWithImageInRect(image.CGImage, frame); //创建一个基于位图frame的大小的上下文 UIGraphicsBeginImageContext(frame.size); CGContextRef context=UIGraphicsGetCurrentContext(); //绘制截取的图片 CGContextDrawImage(context, frame, imageRef); piePic=[UIImage imageWithCGImage:imageRef]; UIGraphicsEndImageContext(); } return piePic;}
该函数是截取image图片frame区域内的图片,截取形状为矩形,CGImageRef是像素图像,能实现很多对图片的操作,比如缩放,截取等。
在网上查找的绘图操作都需要创建一个上下文,这个上下文究竟是做啥的,下面做了一个实验
//裁剪图片的函数-(UIImage*)cutImageAtSquare:(UIImage*)image Frame:(CGRect)frame{ UIImage* piePic=nil; if(self){ //获取在_image图片的frame区域内的图片 CGImageRef imageRef=CGImageCreateWithImageInRect(image.CGImage, frame); piePic=[UIImage imageWithCGImage:imageRef]; } return piePic;}
将上下文的操作去掉,直接进行图片的截取和创建操作,运行程序后并没有明显不同,经过分析后,可能进入了一个误区,截一张图并不需要让其重新创建一个上下文(这个上下文其实是一张画布),或者说在获取或创建图片的时候imageRef和piePic已经创建了一个新的画布并进行了相应的绘图操作,所以第一部分的代码进行了两次(或三次?)创建画布的操作,也就是有一部分代码进行了无用功。以下为重新校正的代码:
//裁剪图片的函数-(UIImage*)cutImageAtSquare:<span style="font-family: Arial, Helvetica, sans-serif;">(UIImage*)image Frame:(</span><span style="font-family: Arial, Helvetica, sans-serif;">CGRect)frame{</span> UIImage* piePic=nil; if(self){ //方法一// //获取在_image图片的frame区域内的图片// CGImageRef imageRef=CGImageCreateWithImageInRect(image.CGImage, frame);// piePic=[UIImage imageWithCGImage:imageRef];
//<span style="white-space:pre"></span>方法二 //获取截取区域大小 CGSize sz=frame.size; //获取截取区域坐标 CGPoint origin=frame.origin; //创建sz大小的上下文,背景是否透明:NO,缩放尺寸:0表示不缩放 UIGraphicsBeginImageContextWithOptions(sz, NO, 0); //移动坐标原点绘制图片,由于上下文坐标系与图片自身坐标系是相反的,所以绘制坐标需要取反 [image drawAtPoint:CGPointMake(-origin.x, -origin.y)]; //获取绘制后的图片 piePic=UIGraphicsGetImageFromCurrentImageContext(); //绘制结束 UIGraphicsEndImageContext(); } return piePic;}
虽然方法一代码量小,且简单,但并不能实现复杂的截图,所以建议使用方法二。
总结完毕,如有错误请指正,谢谢
0 0
- ios拼图游戏(一)之分割图片
- 拼图游戏图片的分割与移动
- android studio gridlayout拼图游戏(一)让图片完整显示
- 项目:拼图游戏(一)
- ios拼图游戏(三)之使用TableView布局
- ios拼图游戏(四)之触摸交换拼图
- ios拼图游戏(五)之嵌套TableView和水平TableView
- javascript实现拼图游戏(支持自定义上传图片,后台自动分割)
- 安卓拼图游戏(一)
- 安卓拼图游戏(一)
- 图像分割之(一)
- iOS 滑块拼图游戏(Puzzle8)
- 拼图游戏也有拼不出的坑(一)
- ios拼图游戏(二)之长按手势和拖动手势的区别
- ios拼图游戏(六)之拼图放大动作以及相应动画
- ios拼图游戏(七)之组合动画以及捕捉动画结束
- CSplitterWnd窗口分割之——静态分割(一)
- 图像分割之(一)概述
- 2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 树状数组+等差数列
- LeetCode|Gray Code
- windows安装Linux系列双系统时基本的注意事项
- linux下c编程条件变量
- CodeForces 246B: Increase and Decrease【水】
- ios拼图游戏(一)之分割图片
- WIN32 lesson1
- NASM汇编实现彩色输出
- Hibernate的基本工作流程
- HDU1823(线段树)
- Mysql之对一些数据类型的选用
- OSI七层模型与TCP/IP模型
- chown chgrp chmod
- c语言 翻译密码