[ios]CGContextDrawImageすると座標の原点が変更されてしまいてんやわんや。

( diary )

ガッツでのりこえました。

いろんな画像を一つの画像に描画させるときにview側で保存しといた座標位置を「CGContextDrawImage」 で画像を描画させるときに座標がずれてしまい、困っていました。

原因はviewとCGContextするときのの座標の原点が異なっていたところと画像の原点はアイテムの中心に になっているところ

view側が(0,0)だとするとコンテキストのときは(0, Y - y - h) Y:yの最大値 h:描画する画像の縦幅

自分で変換してやってみました。

しかし、原点の座標を変更処理があったのでした。

CGContextScaleCTM CGContextTranslateCTM CGAffineTransform

この辺をうまく利用すればできるのですが、描画する画像が垂直反転されて原因がいまいち 不明だったのであきらめました(汗汗汗汗汗汗汗)

以下がやっつけ変換です。

- (CGRect) calcRealSize: (CGRect)rect withRate:(float)rate
{
    NSLog(@"+X: %f, Y: %f, W: %f, H: %f", rect.origin.x,        rect.origin.y,        rect.size.width, rect.size.height);
    NSLog(@"-X: %f, Y: %f, W: %f, H: %f", rect.origin.x * rate, 500 - (rect.origin.y * rate) - (rect.size.height*rate), rect.size.width * rate, rect.size.height * rate);
    CGRect retRect = CGRectMake(rect.origin.x * rate, 
                                500 - (rect.origin.y * rate) - (rect.size.height*rate) , 
                                rect.size.width * rate, 
                                rect.size.height * rate);

    return retRect;
}

■参照URL http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGAffineTransform/Reference/reference.html http://ja.w3support.net/index.php?db=so&id=506622