Все методы сглаживания сильно зависят от непрозрачности линии. При примерно 50% прозрачности уже всё становится не сглаженным и имеет артефакты.
То есть отрисовку на полностью прозрачном холсте (CCanvas) можно сделать с учётом нижнего слоя (график и другие объекты) и это будет без артефактов.
Правда представляется это весьма костыльно и громоздко. Непонятно также пока, насколько это скажется на производительности. Хотелось бы всё же, чтобы этот баг исправили разработчики терминала.
Можно даже тот случай решить, о котором ты упомянул:
То есть отрисовку на полностью прозрачном холсте (CCanvas) можно сделать с учётом нижнего слоя (график и другие объекты) и это будет без артефактов.
Правда представляется это весьма костыльно и громоздко. Непонятно также пока, насколько это скажется на производительности. Хотелось бы всё же, чтобы этот баг исправили разработчики терминала.
Я бы такую задачку (если не разработчики, а участники форума) направил для решения Николаю @Nikolai Semko ;)
Я бы такую задачку (если не разработчики, а участники форума) направил для решения Николаю @Nikolai Semko ;)
Он работает только с одним холстом.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
Ну так ведь это же алгоритм. Какая разница - на одном холсте, или нескольких?
Ну так ведь это же алгоритм. Какая разница - на одном холсте, или нескольких?
Мы обсудили две задачи:
1. Если речь о той, о которой я говорил изначально, то тогда для некоторых случаев алгоритмического решения было бы достаточно.
2. Если о той, которую упомянул ты, то тогда здесь парой функций не обойтись. Нужна схема, где в массивах сохраняются все слои. Каждый слой должен отрисовываться с учётом того, что нарисовано на слоях под ним. Кроме этого нужно корректировать все методы в классе CCanvas. Цвет каждого пикселя должен смешиваться с тем, который находится под ним с учётом прозрачности. Тогда не будет артефактов (просветы, рваные края и т.д.). Если всё сделать правильно, то тогда можно реализовать полупрозрачность с размытием. Всё это достаточно просто реализовать на одном холсте. Но когда используется несколько холстов, то это реализовать значительно сложнее.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
На самом деле я использую несколько холстов ( как правило не больше 4)
Всегда существует золотая середина. Одна крайность - всю статику и всю динамику рисовать на одном холсте, другая крайность - все объекты рисовать, как отдельные холсты.
Важно не забывать, что если у вас есть два холста с прозрачностью, перекрывающие друг друга, то все равно процессор, ( может быть в Win10-11 GPU,,но думаю все же CPU), будут смешивать каждый пиксель даже однородного (ненулевой прозрачности) фона.
Здесь можно позаимствовать у JS практику кэширования канваса или его части для повышения производительности.
Что касается сглаженных кругов, то я уже публиковал вариант такого круга, которая идеальна (по производительности) для кругов радиусом меньше ~5 пикселей. Функция вроде называлась iDot(), и была в коде 3DStars. Она очень примитивная и короткая (примерно 10 строк кода). Для кругов большего радиуса она далеко не оптимальна в плане производительности. Для больших радиусов высокопроизводительная функция уже больше 100 строк кода.
Да, после многих лет установления новых нейронных связей в мозгу по холсту, я сейчас могу сделать библиотеку по холсту любого уровня. Было бы время и мотивация.
1. Если речь о той, о которой я говорил изначально, то тогда для некоторых случаев алгоритмического решения было бы достаточно.
2. Если о той, которую упомянул ты, то тогда здесь парой функций не обойтись. Нужна схема, где в массивах сохраняются все слои. Каждый слой должен отрисовываться с учётом того, что нарисовано на слоях под ним. Кроме этого нужно корректировать все методы в классе CCanvas. Цвет каждого пикселя должен смешиваться с тем, который находится под ним с учётом прозрачности. Тогда не будет артефактов (просветы, рваные края и т.д.). Если всё сделать правильно, то тогда можно реализовать полупрозрачность с размытием. Всё это достаточно просто реализовать на одном холсте. Но когда используется несколько холстов, то это реализовать значительно сложнее.
Я вроде говорил лишь об алгоритме сглаживания. Безотносительно к наложению прозрачных холстов друг на друга. Хотя... Если наложить, то наверняка всплывут новые задачи. Потому и сослался на Николая - у него вон, видишь, всё нейронными связями давно закреплено, и мозг уже сам наверное мыслит с учётом всех возможных проблем с канвасом )
Я вроде говорил лишь об алгоритме сглаживания. Безотносительно к наложению прозрачных холстов друг на друга. Хотя... Если наложить, то наверняка всплывут новые задачи. Потому и сослался на Николая - у него вон, видишь, всё нейронными связями давно закреплено, и мозг уже сам наверное мыслит с учётом всех возможных проблем с канвасом )
Артем, это реально не тривиальные задачи, которые требуют новых нейронных связей. Например в SVG есть такое понятие как viewBox. Уже кучу видосов посмотрел как он работает, кучу документации прочитал, кучу кода написал, а до сих пор иногда впадаю в ступор. Нужных нейронных связей до сих пор нет, хотя уже несколько раз казалось, что во всем разобрался.
Все методы сглаживания сильно зависят от непрозрачности линии. При примерно 50% прозрачности уже всё становится не сглаженным и имеет артефакты.
Сейчас артефакты даже с полностью непрозрачными линиями.
Речь шла о попытке нарисовать полностью непрозрачный круг со сглаженными краями (по алгоритму Ву) без потери сглаженности.
Для этого нужны специальные методы заливки со сглаженными краями.
Сейчас артефакты даже с полностью непрозрачными линиями.
Речь шла о попытке нарисовать полностью непрозрачный круг со сглаженными краями (по алгоритму Ву) без потери сглаженности.
Для этого нужны специальные методы заливки со сглаженными краями.
Понимаю, что самостоятельно не сделать?
Понимаю, что самостоятельно не сделать?
Почему нет? Попробуй! )
Можно даже тот случай решить, о котором ты упомянул:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Визуализируй это! Графическая библиотека в MQL5 как аналог plot из R"
Artyom Trishkin, 2023.07.31 12:39
Все методы сглаживания сильно зависят от непрозрачности линии. При примерно 50% прозрачности уже всё становится не сглаженным и имеет артефакты.
То есть отрисовку на полностью прозрачном холсте (CCanvas) можно сделать с учётом нижнего слоя (график и другие объекты) и это будет без артефактов.
Правда представляется это весьма костыльно и громоздко. Непонятно также пока, насколько это скажется на производительности. Хотелось бы всё же, чтобы этот баг исправили разработчики терминала.
Почему нет? Попробуй! )
Можно даже тот случай решить, о котором ты упомянул:
То есть отрисовку на полностью прозрачном холсте (CCanvas) можно сделать с учётом нижнего слоя (график и другие объекты) и это будет без артефактов.
Правда представляется это весьма костыльно и громоздко. Непонятно также пока, насколько это скажется на производительности. Хотелось бы всё же, чтобы этот баг исправили разработчики терминала.
Я бы такую задачку (если не разработчики, а участники форума) направил для решения Николаю @Nikolai Semko ;)
Я бы такую задачку (если не разработчики, а участники форума) направил для решения Николаю @Nikolai Semko ;)
Он работает только с одним холстом.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
Он работает только с одним холстом.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
Ну так ведь это же алгоритм. Какая разница - на одном холсте, или нескольких?
Ну так ведь это же алгоритм. Какая разница - на одном холсте, или нескольких?
Мы обсудили две задачи:
1. Если речь о той, о которой я говорил изначально, то тогда для некоторых случаев алгоритмического решения было бы достаточно.
2. Если о той, которую упомянул ты, то тогда здесь парой функций не обойтись. Нужна схема, где в массивах сохраняются все слои. Каждый слой должен отрисовываться с учётом того, что нарисовано на слоях под ним. Кроме этого нужно корректировать все методы в классе CCanvas. Цвет каждого пикселя должен смешиваться с тем, который находится под ним с учётом прозрачности. Тогда не будет артефактов (просветы, рваные края и т.д.). Если всё сделать правильно, то тогда можно реализовать полупрозрачность с размытием. Всё это достаточно просто реализовать на одном холсте. Но когда используется несколько холстов, то это реализовать значительно сложнее.
Он работает только с одним холстом.
А я пока не готов переписывать свою графическую библиотеку, чтобы всё работало на одном холсте.
Хоть это и интересно, но зная, сколько на это может уйти времени не могу в данный момент решиться на такое испытание. Времени сейчас нет так много, как раньше.
Мы обсудили две задачи:
1. Если речь о той, о которой я говорил изначально, то тогда для некоторых случаев алгоритмического решения было бы достаточно.
2. Если о той, которую упомянул ты, то тогда здесь парой функций не обойтись. Нужна схема, где в массивах сохраняются все слои. Каждый слой должен отрисовываться с учётом того, что нарисовано на слоях под ним. Кроме этого нужно корректировать все методы в классе CCanvas. Цвет каждого пикселя должен смешиваться с тем, который находится под ним с учётом прозрачности. Тогда не будет артефактов (просветы, рваные края и т.д.). Если всё сделать правильно, то тогда можно реализовать полупрозрачность с размытием. Всё это достаточно просто реализовать на одном холсте. Но когда используется несколько холстов, то это реализовать значительно сложнее.
Я вроде говорил лишь об алгоритме сглаживания. Безотносительно к наложению прозрачных холстов друг на друга. Хотя... Если наложить, то наверняка всплывут новые задачи. Потому и сослался на Николая - у него вон, видишь, всё нейронными связями давно закреплено, и мозг уже сам наверное мыслит с учётом всех возможных проблем с канвасом )
Я вроде говорил лишь об алгоритме сглаживания. Безотносительно к наложению прозрачных холстов друг на друга. Хотя... Если наложить, то наверняка всплывут новые задачи. Потому и сослался на Николая - у него вон, видишь, всё нейронными связями давно закреплено, и мозг уже сам наверное мыслит с учётом всех возможных проблем с канвасом )
Артем, это реально не тривиальные задачи, которые требуют новых нейронных связей. Например в SVG есть такое понятие как viewBox. Уже кучу видосов посмотрел как он работает, кучу документации прочитал, кучу кода написал, а до сих пор иногда впадаю в ступор. Нужных нейронных связей до сих пор нет, хотя уже несколько раз казалось, что во всем разобрался.