タイル張りの画像を描画し、通常のパンとズームのジェスチャを使用してそれらを変換したいと考えています。ここでの問題は、小数点以下の桁数が多いスケーリング変換を行うと、タイルの中央にピクセルの細い線 (1 または 2) が表示されることです。私はこのように問題を切り分けることができました:
CGContextSaveGState(UIGraphicsGetCurrentContext());
CGContextSetFillColor(UIGraphicsGetCurrentContext(), CGColorGetComponents([UIColor redColor].CGColor));
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);//rect from drawRect:
float scale = 0.7;
CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(50, 50, 100, 100), testImage);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(150, 50, 100, 100), testImage);
CGContextRestoreGState(UIGraphicsGetCurrentContext());
スケールが 0.7 の場合、2 つの画像は正しく並べて表示されます。
スケールが 0.777777 の場合 (6 行目を "float scale = 0.777777;" に変更)、視覚的なアーティファクトが表示されます。
この問題を回避する方法はありますか? これは、CGImage、CGLayer、および長方形などのプリミティブ フォームで発生します。MacOSx でも発生します。
助けてくれてありがとう!
編集: これは CGContextFillRect のようなプリミティブ フォームでも発生することを追加しました
edit2: MacOSx でも発生します!