1

分数のペン幅で奇妙な動作が見られます。何が起こっているのか誰かが説明できるのだろうか. Paint イベントに応答して、フォーム上に四角形を描画します。

private void Form1_Paint(object sender, PaintEventArgs e)
{
  const float width = 1.996093F;
  Rectangle rectangle = new Rectangle(10, 10, 20, 20);

  using (Pen pen = new Pen(Color.Black, width))
  {
    e.Graphics.DrawRectangle(pen, rectangle);
  }
}

幅が 0 ~ 1.996093 の場合、幅が 1 ピクセルの四角形が得られます。幅が 1.996094 ~ 2.003906 の場合、幅が 2 ピクセルの長方形が得られます。2.003907 から 3.996093 までは 3 ピクセルなどです。さらに奇妙なことに、幅が 1.9960937 の場合、上端の幅が 2 ピクセルで、他の端の幅が 1 ピクセルの四角形が得られます。

ここで何が起こっているのか誰か説明できますか? カットオフポイントが1.5、2.5、3.5などになることを期待していました.

4

1 に答える 1

0

描画している Graphics オブジェクトのアンチエイリアスを有効にすると、問題が解消されるはずです。

問題は永遠に続きます。部分的に描画されたピクセルを取得した場合、それらは黒になりますか白になりますか? 結果は、アルゴリズムと推測に依存します。

実際には鮮明でクリアな 1 ピクセルまたは 2 ピクセル幅の線が必要なのに、なぜ分数のピクセル幅を使用しているのでしょうか。幅を簡単に整数に丸めることができ、そのような問題はもう見られません。

于 2009-10-29T10:08:03.810 に答える