GDI+ を使用して 2 つの四角形を並べて描画し、倍率を適用してズーム効果を持たせると、一部の倍率の四角形の間にアーティファクトが表示されます。
問題を示す次のコードがあります。
var scale = (float)(numericUpDown1.Value)/100.0f;
var g = e.Graphics;
var b = new SolidBrush(Color.Red);
var rect1 = new Rectangle(10, 40, 100, 100);
var rect2 = new Rectangle(110, 40, 100, 100);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.ScaleTransform(scale, scale);
g.FillRectangle(b, rect1);
g.FillRectangle(b, rect2);
このコードを使用して "numericUpDown1" を 100 に設定すると、次のようになります。
スケールを 125 に設定すると、長方形の間に線が表示されます。
10 の倍数ではないほぼすべての値にスケーリングすると、この問題が発生します。線をよく見ると、アンチエイリアス効果のようです。私の実際のシナリオでは、長方形が直線ではないポリゴンである可能性があるため、アンチエイリアスを削除できません。
PixelOffsetMode、CompositingQuality、Antialiasing の切り替えなど、多くのことを試しましたが、何も機能しません。私の目標は、MS PowerPoint と同じレベルの品質を実現することです。