Direct2D は正しくレンダリングされています。(100, 120) などのピクセル座標を指定すると、ピクセル座標 (100, 120) から (101, 121) までのピクセル要素の左上隅が参照されます (上/左は包括的であり、右/下は排他的です)。これは直線の水平線であるため、(99.5, 119.5) - (300.5, 120.5) から塗りつぶされた長方形を効果的に取得しています。このエッジが隣接するピクセルにこぼれるため、「間違った」明るさで「2 ピクセル幅」の線が表示されるのはそのためです。ピクセル座標(領域のない点) とピクセル要素(1x1 の領域を持つ画面上の物理的な点、またはもちろん 1 つだけ) の観点から考える必要があります。
ピクセル (100, 120) から (300, 120) をカバーする直線を描きたい場合は、SemMike のエイリアス レンダリングの使用に関する提案 (これは直線に最適です!) を使用するか、半分を使用することができます。 - ピクセル オフセット (strokeWidth=1 のため、他の strokeWidth については、strokeWidth/2 で調整)。(100.5, 120.5) - (299.5, 120.5) から線幅 1.0 で描画すると、探しているものが得られます。そのストロークは、指定したピクセル座標の周りに広がるため、ピクセル要素 (100, 120) - (300, 121) にわたって「塗りつぶされた四角形」が得られます。繰り返しますが、これは排他的な範囲であるため、'y=121' は実際には満たされず、x=300 も満たされません。
なぜこれが GDI のようなもので起こらないのか疑問に思っているのであれば、それはアンチエイリアス レンダリングを行わないためであり、すべてが常にピクセル要素にスナップします。Shapes を使用しているときに WPF でこれが発生しない理由は、レイアウトの丸め (UseLayoutRounding) とピクセルのスナップを使用しているためです。Direct2D は比較的低レベルの API であるため、これらのサービスを提供しません。