Potrzebujesz jednej szerokiej na pionowe linie poziomej i pionowej z ostrymi, a nie rozmytymi krawędziami.
Jeśli wszystkie współrzędne w swojej SVG są liczbami całkowitymi, może można zrównoważyć cały obraz przez 0,5, za pomocą elementu transform:
// first group has no transform
// lines appear blurred, because they are centered on boundary of two pixels
<g id = "blurred">
<line x1="10" y1="10" x2="110" y2="10" stroke="black" stroke-width="1"/>
<line x1="10" y1="10" x2="10" y2="100" stroke="black" stroke-width="1"/>
</g>
// second group has half pixel transform -
// lines will appear sharp because they are translated to a pixel centre
<g id="sharp" transform="translate(0.5,0.5)">
<line x1="120" y1="10" x2="220" y2="10" stroke="black" stroke-width="1"/>
<line x1="120" y1="10" x2="120" y2="100" stroke="black" stroke-width="1"/>
</g>
ale będzie nie działają dla linii poziomych/pionowych, które nie są zdefiniowane za pomocą współrzędnych całkowitych lub gdy inna transformacja powoduje ich przesunięcie poza współrzędne całkowite.
Jeśli ten pomysł nie może być wykorzystany do rozwiązania problemu, prawdopodobnie potrzebna jest technika "przyciągania pikseli". Spowoduje to zanalizowanie linii przed jej narysowaniem. Jeśli linia jest pionowa lub pozioma (po transformacji), musisz dostosować współrzędne, aby znalazły się w centrum piksela po transformacji.
Być może zainteresuje Cię wyjaśnienie na temat tego powszechnego problemu z informacjami na temat numeru WPF Pixel Snapping.
To może działać, jeśli mogę wyłączyć AA, to rozwiąże problem. –
OK, to działało, tylko problem, styl jQuery SVG nie jest ustawiony prawidłowo, jeśli nazywasz go shapeRendering, jak to się mówi w jego dokumentacji, musi być renderowaniem kształtu, w przeciwnym razie nie zadziała. –
Przypuszczam, że musi to być 'shapeRendering', gdy ustawiasz go jako właściwość obiektu DOM:' yourElement.style.shapeRendering = "crispEdges" ', ale wewnątrz atrybutu stylu powinien zachować swoją oryginalną nazwę. –