时间:2021-05-20
前言
在实际的开发中我们可能会遇到这种情况: 需要对图片进行一定角度的旋转。对于这种需要,我们可能会用UIView的transform进行旋转,但是这样做其实只是对承载imageView的view进行了一定角度的旋转,而imageView并没有旋转。所有这样的做法并不好。
如果需要实现对imageView实现一定角度的旋转,具体步骤是:
1.将image转成context。
2.对context进行一定角度的旋转。
3.将旋转后的context 转化成image。
经过这三个步骤,我们就能够实现将图片真正的做到旋转。
好了,直接上代码:
#import"UIImage+RotateImageTool.h"#import<QuartzCore/QuartzCore.h>#import<Accelerate/Accelerate.h>@implementationUIImage (RotateImageTool)-(UIImage*)rotateImageWithDegree:(CGFloat)degree{//将image转化成context//获取图片像素的宽和高size_t width =self.size.width*self.scale;size_t height =self.size.height*self.scale;//颜色通道为8因为0-255经过了8个颜色通道的变化//每一行图片的字节数因为我们采用的是ARGB/RGBA所以字节数为width * 4size_t bytesPerRow =width *4;//图片的透明度通道CGImageAlphaInfo info =kCGImageAlphaPremultipliedFirst;//配置context的参数:CGContextRef context =CGBitmapContextCreate(nil, width, height,8, bytesPerRow,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault|info);if(!context) {return nil;}//将图片渲染到图形上下文中CGContextDrawImage(context,CGRectMake(0,0, width, height),self.CGImage);uint8_t* data = (uint8_t*)CGBitmapContextGetData(context);//旋转欠的数据vImage_Buffer src = { data,height,width,bytesPerRow};//旋转后的数据vImage_Buffer dest= { data,height,width,bytesPerRow};//背景颜色Pixel_8888 backColor = {0,0,0,0};//填充颜色vImage_Flags flags = kvImageBackgroundColorFill;//旋转context vImageRotate_ARGB8888(&src, &dest,nil, degree *M_PI/180.f, backColor, flags);//将conetxt转换成imageCGImageRef imageRef =CGBitmapContextCreateImage(context);UIImage* rotateImage =[UIImageimageWithCGImage:imageRefscale:self.scaleorientation:self.imageOrientation];returnrotateImage;}代码中有详细的注释,在这里我就不过多的解释了。感兴趣的可以到github上面下载哦。
下载地址:github.com/15221532825/ImageTool (本地下载)
附:iOS ImageView的Image自适应缩放显示全套处理方法
// retina屏幕图片显示问题[_detailImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];// 不规则图片显示_detailImageView.contentMode = UIViewContentModeScaleAspectFill;_detailImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;// 图片大于或小于显示区域_detailImageView.clipsToBounds = YES;总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了Unity实现绕任意轴任意角度旋转向量的具体代码,供大家参考,具体内容如下游戏中有一需求,就是一个矩形或者Cube绕着某一点旋转任意角度,现
用cad制图时常常需要对图块进行旋转,但是旋转的角度又不一定是整数,我之前分享过一个任意比例缩放的经验,也可用进行任意角度旋转,但是最常用的还是下面要分享的
位图的旋转也可以借助Matrix或者Canvas来实现。通过postRotate方法设置旋转角度,然后用createBitmap方法创建一个经过旋转处理的Bit
引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度,例如$("#rotate-image").ro
本文实例为大家分享了opencv实现图像旋转效果的具体代码,供大家参考,具体内容如下图像旋转:在opencv中首先根据旋转角度和中心获取旋转矩阵,然后根据旋转矩