Интерполяция ближайшего соседа в холсте (Internet Explorer 9)

я создал простое средство просмотра изображений (с сеткой и изображением) с холстом (только изображение) и некоторыми 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();
    }

person tonka    schedule 12.05.2015    source источник


Ответы (1)


См. примечания о совместимости на странице рендеринга изображений MDN (выделено мой)

[1] Internet Explorer 7 и 8 поддерживает нестандартное свойство -ms-interpolation-mode с двумя значениями (бикубическое и ближайший сосед):

применяется только к изображениям (JPG, GIF, PNG, ...)

в IE7 только для изображений без прозрачности

не наследует

значение по умолчанию IE7: ближайший сосед (низкое качество)

значение по умолчанию IE8: бикубический (высокое качество)

устарело в IE9

Похоже, ответ - нет, IE9 его не поддерживает.

person doldt    schedule 12.05.2015
comment
спасибо за Ваш ответ. Звучит плохо. Знаете ли вы какую-нибудь библиотеку эмуляции для этого? - person tonka; 12.05.2015
comment
Я не знаю. Зачем вам так нужна эта функция? Конечно, есть причина, по которой он помечен как устаревший, но я недостаточно знаком с этой темой, чтобы рассказать об этом. - person doldt; 12.05.2015