1

波形を描画しようとしています。描画したいデータポイントの量が事前に計算されています(たとえば、1000)。キャンバスコントロールの全幅を波形で埋めたいです。したがって、描画するすべてのデータポイントの幅を再計算する必要があります。

これを行うために、StrokeThicknessを全幅をデータポイントのnrで割った値に設定しようとしました。(たとえば0.35629)そして0.35629ピクセルごとに幅0.35629ピクセルの線を印刷します。

これにより、不要なモアレ効果が発生します。

WPFが0.35629ピクセル幅の線をどのように描画するので、StrokeThicknessがdoubleであるのは奇妙に感じます。

以下のコード例は、私が何を意味するかを示しています。前半は大丈夫、後半はモアレ効果があります。

これは進むべき道ですか、それとも別のアプローチが必要ですか?

for (int i = 0; i < 500; i++)
{
    Line line = new Line();
    line.X1 = i;
    line.X2 = i;
    line.Y1 = 0;
    line.Y2 = 100;
    line.Stroke = new SolidColorBrush(Colors.Black);
    line.StrokeThickness = 1;
    this.demoCanvas.Children.Add(line);
}

const double canvasWidth = 525;
const double nrOfDatapoints = 500d;
const double pixelsPerPoint = canvasWidth/nrOfDatapoints  ;
double x = 500;
for (int i = 0; i < nrOfDatapoints; i++)
{
    Line line = new Line();
    line.X1 = x;
    line.X2 = x;
    line.Y1 = 0;
    line.Y2 = 100;
    line.Stroke = new SolidColorBrush(Colors.Black);
    line.StrokeThickness = pixelsPerPoint;
    this.demoCanvas.Children.Add(line);
    x += pixelsPerPoint;
}
4

1 に答える 1

4

モアレを回避するには、SnapToDevicePixels="True"を設定する必要があります。こちらをチェックしてください

于 2012-06-13T20:35:33.440 に答える