IOS:CGRect是对的,但是UIImage翻了

时间:2012-06-05 11:35:06

标签: ios drawing cgcontext

我知道在绘图时我必须翻译坐标系。事情是,当我使用:

CGContextTranslateCTM(_context, 0.0, _size.height);
CGContextScaleCTM(_context, 1.0, -1.0);

我的图像的矩形被翻转,图像被“非翻转”,如果我不使用上面的图像被翻转,并且矩形是非翻转的。

这是我的代码:

CGRectMake(60, 100, image.size.width, image.size.height);
CGContextSaveGState(_context);
UIGraphicsBeginImageContext(image.size);
CGContextClearRect(_context, placeholderRect);
CGContextDrawImage(_context, placeholderRect, image.CGImage);
UIGraphicsEndImageContext();
CGContextRestoreGState(_context);

如果图像被翻转,我如何保持我的矩形(非翻转)?

由于

2 个答案:

答案 0 :(得分:3)

而不是使用CGContextDrawImage使用[image drawAtPoint:CGPointMake(0,0)];

答案 1 :(得分:1)

诀窍可能在于这个UIImage方法

+ (UIImage *)imageWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation

取向是以下之一:)

typedef enum {
   UIImageOrientationUp,
   UIImageOrientationDown,   // 180 deg rotation
   UIImageOrientationLeft,   // 90 deg CCW
   UIImageOrientationRight,   // 90 deg CW
   UIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip
   UIImageOrientationDownMirrored,  // horizontal flip
   UIImageOrientationLeftMirrored,  // vertical flip
   UIImageOrientationRightMirrored, // vertical flip
} UIImageOrientation;

修改:更新

我刚刚在UIView子类中完成了这个简单的代码示例,它覆盖了drawrect并且它工作得很好。它不使用UIImage方法,但工作原理相同。

UIImage *image = [UIImage imageNamed:@"image.png"];

CGContextRef _context = UIGraphicsGetCurrentContext();

CGContextSaveGState(_context);

CGContextDrawImage(_context, CGRectMake(100, 20, image.size.width, image.size.height), image.CGImage);

CGContextScaleCTM(_context, -1.0f, 1.0f);

CGContextDrawImage(_context, CGRectMake(-300, 20, image.size.width, image.size.height), image.CGImage);

CGContextRestoreGState(_context);