2

描画時に座標系を変換する必要があることはわかっています。問題は、私が使用するときです:

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);

画像が反転している間、どのように四角形 (非反転) を維持しますか?

ありがとう

4

2 に答える 2

3

CGContextDrawImage使用する代わりに[image drawAtPoint:CGPointMake(0,0)];

于 2012-09-04T13:34:05.227 に答える
1

トリックはこのUIImageメソッドにあるかもしれません

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

オリエンテーションはこれらの1つです:)

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;

編集:更新

この単純なコードサンプルを、drawrectをオーバーライドするUIViewサブクラスで実行したところ、完全に機能しました。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);
于 2012-06-05T11:41:44.707 に答える