CoreGraphics 画像の描画

CoreGraphicsを使って, 画像を描画します。画像であればUIImageViewでやれよというのが本音ですが, CoreGraphicsであればもう少し工夫ができる….
気がします。

CGContextDrawImageを使います。引数にUIImageを使うので, UIImageはどこかで確保しておく必要があります。
あとなぜか座標系が逆になっていて, CGContextConcatCTM でうまく処理をしないと正しい方向に表示されません。
(MacCocoaだとそのまま何ですが… 座標系がMac Cocoaと比べると基本的に逆なんですよね上下。)

ヘッダ

DrawImageView.h

#import <UIKit/UIKit.h>
@interface DrawImageView : UIView
@property(nonatomic)UIImage *img;
@end

本体

#import "DrawImageView.h"

@implementation DrawImageView

@synthesize img;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.img = [UIImage imageNamed:@"mikasa.jpeg"];
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGSize s = [img size];
    CGRect r = CGRectMake(0, 0, s.width, s.height);
    
    CGAffineTransform affine = CGAffineTransformIdentity;
    affine.d = -1.0f;
    affine.ty = s.height;
    CGContextConcatCTM(context, affine);
    CGContextDrawImage(context, r, [img CGImage]);
}

@end

coregraphics-drawimage