Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.02.2020, 00:30
Интересующийся
Отправить личное сообщение для AndrewKokorev Посмотреть профиль Найти все сообщения от AndrewKokorev
 
Регистрация: 25.02.2020
Сообщений: 19

Помогите с Canvas. Прозрачные пиксели непонятного происхождения.
При выставлении ширины линии в 1(ctx.lineWidth = 1), получается такая картина https://drive.google.com/open?id=1Hh...lTGJFfZSD3ibGj

Линия сама толще чем задана. Цвет при отрисовке почему-то прозрачный и с каждым нарисованой фигурой, прозрачность уменьшается и только на 5 прямоугольнике прозрачность исчезает. У круга закрашиваются дополнительные пиксели, прозрачным цветом. Как-будто тени, но это не тени т.к. уже приписывал их отключение.

Но если задать ctx.lineWidth = 2, то проблема с прямоугольником исчезает и всё рендерится как надо, но с кругом проблема так и остаётся.

Координаты все целочисленные т.е. x = 5, а не x = 5.3467, что могло давать бы подобную картину. При рисовании карандашом в начале видео видно, что проблема не в этом.
Сначала думал что проблема в том что задаю канвасу размеры допустим canvas.width = 32; canvas.height =32 и потом растягиваю в css на ширину контейнера.

Но тут набросал на кодопен, задавая размеры не через CSS, codepen.io/andreykokorev/pen/RwPKjWw и точно такая же картина. Если увеличить на максимум, то будет видно те же самые проблемы: грани прямоугольника прозрачные, шире заданных и прозрачные пиксели у круга. Задав ширину лини в 2, толщина граней также не увеличивается, а просто они теряют прозрачность. Получается проблема не в css, что в принципе и логично, css просто расстягивает и эту проблему сразу видно.
Как с этим бороться, почему такое вообще происходит?И растягивание канваса это плохая практика или нет? Не зря же сделали свойство CSS image-randering: pixelated, без него картинка на растянутом канвасе будет размытой.
Ответить с цитированием
  #2 (permalink)  
Старый 25.02.2020, 00:46
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Подозреваю, что у тебя та самая ситуация, которая описана здесь, в параграфе "Контуры". Надо добавить 0.5 к координатам.

https://webref.ru/layout/diveintohtml5/canvas
Ответить с цитированием
  #3 (permalink)  
Старый 25.02.2020, 15:59
Интересующийся
Отправить личное сообщение для AndrewKokorev Посмотреть профиль Найти все сообщения от AndrewKokorev
 
Регистрация: 25.02.2020
Сообщений: 19

Спасибо большое)) 4 дня уже мучился. С прямоугольником проблема решилась добавлением +0.5 ctx.strokeRect(x+0.5,y + 0.5,width, height), с кругом пока нет, но хоть понятно куда копать. Еще не прочитал, но здесь как понимаю объяснение почему так происходит https://stackoverflow.com/questions/...ine-blurryness
Ответить с цитированием
  #4 (permalink)  
Старый 25.02.2020, 17:21
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

С кругами не просто. Так же как и с другими кривыми и наклонными линиями.
Вроде есть свойство контекста imageSmoothingEnabled, которое нужно установить в false. Тогда не будет сглаживать, но появится ступенчатость.
См https://developer.mozilla.org/ru/doc...oothingEnabled
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
canvas помогите нарисовать круг dima85 Общие вопросы Javascript 1 15.04.2019 22:29
Размытые (прозрачные) края фигуры в canvas smart-create Events/DOM/Window 4 22.03.2019 11:04
Помогите с диаграммой на canvas walker1232 Общие вопросы Javascript 3 03.12.2015 09:43
Помогите с canvas rikod Общие вопросы Javascript 0 08.10.2012 09:48