Gur*_*ngh 30 iphone core-graphics objective-c ios
#define radians(degrees) (degrees * M_PI/180)
UIImage *rotate(UIImage *image) {
CGSize size = image.size;;
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
// If this is commented out, image is returned as it is.
CGContextRotateCTM (context, radians(90));
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Run Code Online (Sandbox Code Playgroud)
还有别的错吗?出于想法.
nie*_*bot 52
问题是你的上下文正在左右角(0,0)旋转.如果围绕左上角旋转90度,则所有绘图都将出现在上下文的边界之外.你需要一个两步变换来将上下文的原点移动到它的中间,然后旋转.此外,您需要以移动/旋转原点为中心绘制图像,如下所示:
CGContextTranslateCTM( context, 0.5f * size.width, 0.5f * size.height ) ;
CGContextRotateCTM( context, radians( 90 ) ) ;
[ image drawInRect:(CGRect){ { -size.width * 0.5f, -size.height * 0.5f }, size } ] ;
Run Code Online (Sandbox Code Playgroud)
HTH
lbs*_*eek 11
我尝试遵循代码,它的工作原理,来自http://www.catamount.com/blog/1015/uiimage-extensions-for-cutting-scaling-and-rotating-uiimages/
+ (UIImage *)rotateImage:(UIImage*)src byRadian:(CGFloat)radian
{
// calculate the size of the rotated view's containing box for our drawing space
//UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0, src.size.width, src.size.height)];
//CGAffineTransform t = CGAffineTransformMakeRotation(radian);
//rotatedViewBox.transform = t;
//CGSize rotatedSize = rotatedViewBox.frame.size;
CGRect rect = CGRectApplyAffineTransform(CGRectMake(0,0, src.size.width, src.size.height), CGAffineTransformMakeRotation(radian));
CGSize rotatedSize = rect.size;
// Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
// Move the origin to the middle of the image so we will rotate and scale around the center.
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
// // Rotate the image context
CGContextRotateCTM(bitmap, radian);
// Now, draw the rotated/scaled image into the context
CGContextScaleCTM(bitmap, 1.0, -1.0);
CGContextDrawImage(bitmap, CGRectMake(-src.size.width / 2, -src.size.height / 2, src.size.width, src.size.height), [src CGImage]);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Run Code Online (Sandbox Code Playgroud)
如果您不想更改所有原点和尺寸,请移动中心,旋转并再次将中心更改为角落,如下所示:
CGContextTranslateCTM( context, 0.5f * size.width, 0.5f * size.height ) ;
CGContextRotateCTM( context, radians( 90 ) ) ;
CGContextTranslateCTM( context, -0.5f * size.width, -0.5f * size.height ) ;
然后正常绘制如下:
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
| 归档时间: |
|
| 查看次数: |
28565 次 |
| 最近记录: |