У меня есть холст, который учитывает devicePixelRatio.используя drawImage() рассматривая устройствоPixelRatio делает изображение великолепным, но текст, формы выглядят странно
Это делает текст и фигуры красивыми на так называемых сетчатых дисплеях (текст резкий, формы более плавные и т. Д.).
Выполнение этого делает отображение изображения ОЧЕНЬ НИКОГДА, то есть изображение 1000x500 отлично смотрится на холсте 500x250. Хорошо.
ctx.drawImage(img, 0, 0, img.width/ratio, img.height/ratio);
Однако, когда это делать, остальное оказанной вещи есть тексты и форма выглядят как они оказали двойные, и вещи, которые отображаются один раз, но должна впоследствии исчезнуть (это игра, где фигуры должны исчезнуть) оставайтесь на холсте, как будто он полностью неисправен.
Выполнение этого
ctx.drawImage(img, 0, 0, img.width, img.height)
с изображением, которое 500x250 делает изображение несколько размытым, как все изображения в Интернете, который не учитывает «2x» ситуацию, но все остальные формы и тексты отображаются нормально, и теперь логика работает так, как ожидалось.
Возможно, я совершу ошибку новобранец. Есть идеи? Благодарю.
EDIT Просто чтобы предоставить дополнительную информацию. Использование drawImage на холсте с шириной ширины 1000x500 x (но css 500x250) делает не Позвольте мне просто использовать изображение размером 1000x500 и визуализировать его без разделения высоты и ширины этого изображения на devicePixelRatio. Это меня озадачивает. Почему вам все равно нужно будет
ctx.drawImage(img, 0, 0, img.width/ratio, img.height/ratio)
чтобы получить его правильно?
EDIT 2 Я знаю, что вы будете вздыхать (если вы все еще читаете), но это, кажется, на самом деле связано с оказанием PNG-изображения. Рендеринг GIF работает отлично. Как и JPG. Однако у PNG есть некоторые реальные проблемы. Я не могу понять, что я делаю неправильно. Изображение получает черную рамку вокруг (если эта информация помогает), при рендеринге png, то есть, и текст и другие вещи, которые отображаются, выглядят так же, как и черные границы; выглядит странно. Как в Chrome, так и в Safari.
Не могли бы вы показать нам, как вы вычисляете/устанавливаете размер холста? Живой пример (скрипка или встроенный) был бы идеальным, чтобы мы могли видеть шаги, сделанные вкл. изображения/текст. – K3N
Ну, я решил это сам. Спасибо за минус один, кто это дал. Я бы хотел, чтобы SO не было таким элитарным местом. Проблема заключалась в альфа-каналах на изображениях PNG, и если вы показываете их в цикле, кадр должен сначала очистить контекст так, как context.clearRect (0, 0, canvasWidth, canvasHeight); или он будет рисовать PNG поверх PNG слишком быстро, поэтому прозрачные части становятся непрозрачными, а также создают всевозможные странные эффекты материала, который вы нарисовываете поверх PNG позже, как текст и фигуры. – Adergaard
Почему бы не создать ответ и отметить его как принятый? Таким образом, этот вопрос будет закрыт. – K3N