首页天道酬勤片左右镜像翻转,平面镜顺时针旋转

片左右镜像翻转,平面镜顺时针旋转

admin 08-23 22:05 281次浏览
let image = board.image! //水平翻转 let flipImageOrientation = (image.imageOrientation.rawValue + 4) % 8 let flipImage = UIImage(CGImage: image.CGImage!, scale: image.scale, orientation: UIImageOrientation(rawValue: flipImageOrientation)!) board.image = flipImage /******* 另外一种水平镜像翻转的写法 ***********/ //Quartz重绘图片 let rect = CGRectMake(0, 0, image .size.width , image .size.height);//创建矩形框 //根据size大小创建一个基于位图的图形上下文 UIGraphicsBeginImageContext(rect.size)// UIGraphicsBeginImageContextWithOptions(rect.size, false, 2) let currentContext = UIGraphicsGetCurrentContext();//获取当前quartz 2d绘图环境 CGContextClipToRect(currentContext, rect);//设置当前绘图环境到矩形框 CGContextRotateCTM(currentContext, CGFloat(M_PI)); //旋转180度 //平移, 这里是平移坐标系,跟平移图形是一个道理 CGContextTranslateCTM(currentContext, -rect.size.width, -rect.size.height); CGContextDrawImage(currentContext, rect, image .CGImage);//绘图 //翻转图片 let drawImage = UIGraphicsGetImageFromCurrentImageContext();//获得图片 //垂直翻转 var flipImageOrientation = (image.imageOrientation.rawValue + 4) % 8 flipImageOrientation += flipImageOrientation%2==0 ? 1 : -1 let flipImage = UIImage(CGImage:image.CGImage!,scale:image.scale,orientation:UIImageOrientation(rawValue: flipImageOrientation)!) board.image = flipImage //顺时针旋转up -> right -> down -> left -> up //逆时针旋转up -> left -> down -> right -> up

这其中的规律能否不用switch 而用rawValue来表示,待明天来继续研究

- (IBAction)btnClicked:(id)sender { UIImage * image = _imageView.image; _imageView.image = nil; //逆时针 UIImageOrientation orientation = image.imageOrientation; switch (orientation) { case UIImageOrientationUp: orientation = UIImageOrientationLeft; break; case UIImageOrientationLeft: orientation = UIImageOrientationDown; break; case UIImageOrientationDown: orientation = UIImageOrientationRight; break; case UIImageOrientationRight: orientation = UIImageOrientationUp; break; default: break; } _imageView.image = [self image:image rotation:orientation];}- (UIImage *)image:(UIImage *)image rotation:(UIImageOrientation)orientation{ long double rotate = 0.0; CGRect rect; float translateX = 0; float translateY = 0; float scaleX = 1.0; float scaleY = 1.0; switch (orientation) { case UIImageOrientationLeft: rotate = M_PI_2; rect = CGRectMake(0, 0, image.size.height, image.size.width); translateX = 0; translateY = -rect.size.width; scaleY = rect.size.width/rect.size.height; scaleX = rect.size.height/rect.size.width; break; case UIImageOrientationRight: rotate = 3 * M_PI_2; rect = CGRectMake(0, 0, image.size.height, image.size.width); translateX = -rect.size.height; translateY = 0; scaleY = rect.size.width/rect.size.height; scaleX = rect.size.height/rect.size.width; break; case UIImageOrientationDown: rotate = M_PI; rect = CGRectMake(0, 0, image.size.width, image.size.height); translateX = -rect.size.width; translateY = -rect.size.height; break; default: rotate = 0.0; rect = CGRectMake(0, 0, image.size.width, image.size.height); translateX = 0; translateY = 0; break; } UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); //做CTM变换 CGContextTranslateCTM(context, 0.0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextRotateCTM(context, rotate); CGContextTranslateCTM(context, translateX, translateY); CGContextScaleCTM(context, scaleX, scaleY); //绘制图片 CGContextDrawImage(context, CGRectMake(0, 0, rect.size.width, rect.size.height), image.CGImage); UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext(); return newPic;}
Golang sync.Once怎么使用SSM框架中常用注解有哪些mysql的.ibd文件过大如何处理Vue3中其它的Composition API有什么Linux下的Anaconda的配置
ug怎么旋转组件,ug镜像拉伸 网页转换微信小程序,微信镜像翻转怎么弄
相关内容