я создал простое средство просмотра изображений (с сеткой и изображением) с холстом (только изображение) и некоторыми svg-сетками благодаря d3.js (аналогично это). Я использую функцию масштабирования из d3.js для масштабирования и панорамирования изображения/линий сетки.
Мое изображение на холсте должно использовать интерполяцию ближайшего соседа. Я установил много элементов стиля для достижения этой цели. Chrome и Firefox работают хорошо, но у меня проблемы с Internet Explorer 9 (мне нужна поддержка ie9). В IE9 изображение всегда размыто.
Отвечает ли Internet Explorer 9 интерполяции ближайшего соседа для холста?
Верны ли мои настройки?
Мой код холста в d3.js:
canvas
.attr("width", dx)
.attr("height", dy)
.attr("style", "outline: thin solid black;")
.style("width", width + "px")
.style("height", height + "px")
.style("transform", "translate(" + marginleft + "px,0)")
.style("image-rendering","-moz-crisp-edges")
.style("image-rendering","-o-crisp-edges")
.style("image-rendering","-webkit-optimize-contrast")
.style("image-rendering","optimize-contrast")
.style("image-rendering","pixelated")
.style("-ms-interpolation-mode","nearest-neighbor")
.call(drawImage);
этот код d3.js должен представлять (в основном) этот css
img {
image-rendering: optimizeSpeed;
image-rendering: -moz-crisp-edges; // Firefox
image-rendering: -o-crisp-edges; // Opera
image-rendering: -webkit-optimize-contrast; // Chrome (and eventually Safari)
image-rendering: pixelated; // Chrome
image-rendering: optimize-contrast; // CSS3 Proposed
-ms-interpolation-mode: nearest-neighbor; // IE8+
}
это моя функция рисования
function drawImage(canvas2: any) {
var context = canvas.node().getContext("2d");
var image = context.createImageData(dx, dy);
for (var y = 0, p = -1; y < dy; ++y) {
for (var x = 0; x < dx; ++x) {
let pixval = heatmap[y][x];
var c = d3.rgb(color(pixval));
if(pixval <= min){
c = d3.rgb(255,255,255);
}
image.data[++p] = c.r;
image.data[++p] = c.g;
image.data[++p] = c.b;
image.data[++p] = 255;
}
}
context.mozImageSmoothingEnabled = false;
context.ImageSmoothingEnabled = false; //context.webkitImageSmoothingEnabled = false;
context.msImageSmoothingEnabled = false;
context.imageSmoothingEnabled = false;
context.putImageData(image, 0, 0);
imageObj.src = canvas.node().toDataURL();
}