前言
在實際的開發中我們可能會遇到這種情況: 需要對圖片進行一定角度的旋轉。對于這種需要,我們可能會用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;
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答