私はSVGのグリッドにrects
の問題があります。SVGグリッドの格子が半透明のFirefoxで
はここjsFiddleで私のコードの上にある:一度に1つの画素をプロットすることにより、正方形を作ることになっているhttps://jsfiddle.net/swpcpvxL/
。私は1×1のSVG rect
を使ってピクセルをプロットします。
var svg = document.getElementById("mysvg");
for (var y = 50; y <= 150; ++y) {
for (var x = 50; x <= 150; ++x) {
var r = Math.floor((x + y)/250);
var g = Math.floor((Math.sin(x/10.0) + 1) * x);
var b = Math.floor((Math.sin(y/10.0) + 1) * x);
var color = "rgb(" + r + "," + g + "," + b + ")";
var k = document.createElementNS("http://www.w3.org/2000/svg", "rect");
k.setAttribute("x", x);
k.setAttribute("y", y);
k.setAttribute("width", "1");
k.setAttribute("height", "1");
k.setAttribute("style", "fill: " + color);
svg.appendChild(k);
}
}
私の問題は、Firefoxではrect
が正しくプロットされないということです。それらは間違った色(洗い流されている)を示し、実際には半透明である。 Firefoxがアンチエイリアスや何かをやっているのは、rect
ちょうど私が望むピクセルにプロットするのではなく、rect
で何か問題が起きていると思う。私もIEでテストしました。この問題はなく、コードは正しく動作します。私はテストするChromeを持っていません。
Firefoxの画像は、hereでアップロードされました。
画像でわかるように、私は円をrect
で見ることができます。これは私が欲しいものではありません!
Firefoxの問題を解決するにはどうすればよいですか?あるいは、SVGにビットマップを生成してプロットするより良い方法がありますか?私はこの方法が少し遅いことに気付きました。おそらくもっと良いアプローチがあります。
ありがとうございます!
私はページをズームしない限り、私のMacでreproできません。その場合、半ピクセル位置のアンチエイリアシングのためにクロムはまったく同じ動作をします。 – Kaiido
ピクセル単位で描画する場合は、キャンバスを使用する方が効果的です。 1pxの矩形の束は描くのにかなり高価です。 – the8472
これはFirefoxのバグのようです。 [Mozillaに報告する](https://bugzilla.mozilla.org/)。 –