загруженное изображение JavaScript размыто (PNG)

1

Я работаю над школьным проектом (всего пару месяцев знания JS), и я наткнулся на эту проблему с рисованием спрайтов на моем холсте. Для рисования я использую эти биты кода.

treeImage = new Image();
treeImage.src = "sprites/treeSprites.png"; 

function rocks() { //to create the rock
    this.x = 1920 * Math.random(); //random location on the width of the field
    this.y = ground[Math.round(this.x/3)]; //ground is an array that stores the height of the ground
    this.draw = function() {
        ctx.save();
        ctx.translate(this.x, this.y);
        ctx.rotate(Math.tan((ground[Math.floor(this.x/3)]-ground[Math.floor(this.x/3)+1])/-3));
        //^rotating based on its position on the ground^
        ctx.drawImage(treeImage, 200, 50, 50, 50, -25, -50, 50, 50);
        ctx.restore();
    }
}

len = rockArray.length; //every frame
for (var i = 0;i<len;i++) {
    rockArray[i].draw();
}

поскольку вы можете видеть, что я запрашиваю только 50 на 50 из изображения, а это 50 на 50, как вы можете видеть на изображении ниже, правильно рисуется мной (насколько я знаю), но точно за пределами 50 на 50 есть черные линии, которые не должны мешать, потому что я только запрашиваю квадрат внутри черных линий. но когда я рисую камень, черные контуры видны. (предположим, что я не могу удалить черные линии по слишком подробным причинам)

доказательство того, что его действительно 50x50, и как он выглядит на моем холсте

что я догадываюсь, что изображение JavaScript хранится, когда я загружаю изображение, размытое, а затем, когда я запрашиваю эту часть из изображения, линии тоже видны, так как размытие "разбрасывает" строки на квадрат я request,

это так? есть ли способ, которым я могу это предотвратить? или, может быть, еще один способ решить эту проблему? потому что я знаю, что люди сделали игры с пиксельным искусством внутри холста, и их изображения не размыты вообще, так сказать.

  • 0
    Похоже, это от антиалиссинга.
  • 0
    Вы на каком-нибудь мониторе с высоким разрешением (например, 4k или сетчатка)? Кроме того, попытайтесь набрать свои координаты.
Показать ещё 1 комментарий
Теги:
image-processing
image
canvas
drawimage

2 ответа

0
Лучший ответ

Использовать canvas.imageSmoothingEnabled = false.

Это сделает изображение более резким, а не размытым.

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/imageSmoothingEnabled

  • 0
    Это действительно заставляет его выглядеть лучше, и это помогает мне в дальнейшем, но черный контур по-прежнему отображается ссылка
0

Если вы рисуете вертикальную линию при x = 5 и width = 1, холст фактически рисует линию от 4,5 до 5,5, это приводит к сглаживанию и нечеткой линии. Быстрый способ исправить это, так что это сплошная линия, состоит в том, чтобы полностью компенсировать весь холст на половину пикселя, прежде чем делать что-то еще.

ctx.translate(-0.5, -0.5);

  • 0
    это действительно еще больше увеличивает внешний вид, и теперь пиксели становятся настолько резкими, насколько это возможно, когда я убираю вращение, но пока вращаются камни, проблема все еще возникает (черные линии вокруг камней)
  • 0
    Это верно для штрихов пути, но не для других методов рисования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню