私が述べたすべてを適用した後でも、私はまだ画像のドラマを持っています。最後に、私はGimpを使用して、すべての画像の「上下反転」バージョンを作成しました。これで、トランスフォームを使用する必要がなくなりました。うまくいけば、これは将来の問題をさらに引き起こさないでしょう。
CGContextDrawImageが私の画像を逆さまに描画する理由を誰かが知っていますか?アプリケーションから画像を読み込んでいます:
Quartz2dは、原点が左下隅にある別の座標系を使用します。したがって、Quartzが100 x 100の画像のピクセルx [5]、y [10]を描画すると、そのピクセルは左上ではなく左下隅に描画されます。したがって、「反転」イメージが発生します。
x座標系が一致するため、y座標を反転する必要があります。
CGContextTranslateCTM(context, 0, image.size.height);
これは、x軸を0単位、y軸を画像の高さとして画像を平行移動したことを意味します。ただし、これだけでは画像が上下逆になり、描画したい場所の下に "image.size.height"が描画されるだけです。
Quartz2Dプログラミングガイドでは、ScaleCTMを使用し、負の値を渡して画像を反転させることを推奨しています。これを行うには、次のコードを使用できます-
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage
呼び出しの直前に2つを組み合わせると、画像が正しく描画されます。
UIImage *image = [UIImage imageNamed:@"testImage.png"];
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, imageRect, image.CGImage);
imageRect座標が画像の座標と一致しない場合は、意図しない結果が生じる可能性があるので注意してください。
座標を元に戻すには:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0, -imageRect.size.height);