Обсуждение статьи "Изучаем класс CCanvas. Реализация прозрачности графических объектов" - страница 5

 
Vladimir Karputov:

Итак проверил: однозначно, делать нужно настоящую панель на базе класса CDialog. 

А теперь как поставить панель сверху значков "Buy", "Sell": у каждой панели есть значок "Свернуть панель":


после того, как Вы свернули панель, а потом снова её развернёте - все объекты в Вашей панели станут сверху всех предыдущих значков. То есть панель после того, как Вы её разворачиваете перерисовывает свои объекты и они будут последними созданными.


Получается объект OBJ_RECTANGLE_LABEL не может быть в полном приоритете на 100% перед всеми объектами ?

Это получается не доработка самого терминала, что все другие объекты могут быть на заднем плане, а значки и полоски сделок всеравно в приоритете над всем. - не порядок

 
Konstantin Seredkin:

Получается объект OBJ_RECTANGLE_LABEL не может быть в полном приоритете на 100% перед всеми объектами ?

Это получается не доработка самого терминала, что все другие объекты могут быть на заднем плане, а значки и полоски сделок всеравно в приоритете над всем. - не порядок


Скорее нежелание программиста делать правильно свою программу с учётом специфики отрисовки объёктов. Терминал тут не при чём.

 
Konstantin Seredkin:

Получается объект OBJ_RECTANGLE_LABEL не может быть в полном приоритете на 100% перед всеми объектами ?

Это получается не доработка самого терминала, что все другие объекты могут быть на заднем плане, а значки и полоски сделок всеравно в приоритете над всем. - не порядок

Учитываете время создания объектов, это и есть приоритеты, кто последний, тот и сверху.

 
Konstantin Seredkin:

Получается объект OBJ_RECTANGLE_LABEL не может быть в полном приоритете на 100% перед всеми объектами ?

Это получается не доработка самого терминала, что все другие объекты могут быть на заднем плане, а значки и полоски сделок всеравно в приоритете над всем. - не порядок

Да, задание порядка отображения не реализовано нормально. Нужно городить сложные огороды с пересозданием.

 
Andrey Khatimlianskii:

Да, задание порядка отображения не реализовано нормально. Нужно городить сложные огороды с пересозданием.

Поэтому пора-бы разработчикам задуматься о дополнительном параметре при создании объектов.

 
Наконец то нашел статью, где мне хоть что то пригодилось.)) Использовал описанный в статье метод смешения двух цветов (верхний и нижний) и получил эффект прозрачности внутри одного канваса. Спасибо.
 
Реter Konow:
Наконец то нашел статью, где мне хоть что то пригодилось.)) Использовал описанный в статье метод смешения двух цветов (верхний и нижний) и получил эффект прозрачности внутри одного канваса. Спасибо.

Это, Петр, слишком просто.

Вот тебе задачка для освоения и закреплении сути вопроса:

 - как смешать два цвета ARGB(a1,r1,g1,b1) и ARGB(a2,r2,g2,b2) в рамках одного слоя, каждый из которых имеет свою прозрачность  a1 и a2?

Без такого смешивания невозможно правильно накладывать друг на друга сглаженные объекты.

 
Nikolai Semko:

Это, Петр, слишком просто.

Вот тебе задачка для освоения и закреплении сути вопроса:

 - как смешать два цвета ARGB(a1,r1,g1,b1) и ARGB(a2,r2,g2,b2) в рамках одного слоя, каждый из которых имеет свою прозрачность  a1 и a2?

Без такого смешивания невозможно правильно накладывать друг на друга сглаженные объекты.

На вскидку: На исходный цвет слоя накладываем первый ARGB(a1,r1,g1,b1) методом изложенным в статье. Далее, поверх первого положенного цвета, накладываем второй, делая рассчеты АRGB по той же формуле. Просто на этот раз, нижнем цветом будет первый, который мы положили над исходным цветом слоя.

Возможно ошибаюсь, Николай, но почему это не должно сработать?

ЗЫ. Еще не экспериментировал, но первый вариант может не сработать, потому что неправильно рассчитывается конечная прозрачность двух верхних слоев. В этом случае, нужно смешать средний слой с верхним, и получив их общий цвет, наложить его на исходный слой.

 
Реter Konow:

На вскидку: На исходный цвет слоя накладываем первый ARGB(a1,r1,g1,b1) методом изложенным в статье. Далее, поверх первого положенного цвета, накладываем второй, делая рассчеты АRGB по той же формуле. Просто на этот раз, нижнем цветом будет первый, который мы положили над исходным цветом слоя.

Возможно ошибаюсь, Николай, но почему это не должно сработать?

ЗЫ. Еще не экспериментировал, но первый вариант может не сработать, потому что неправильно рассчитывается конечная прозрачность двух верхних слоев. В этом случае, нужно смешать средний слой с верхним, и получив их общий цвет, наложить его на исходный слой.

на самом деле задачка не из простых.
Но кто сможет решить ее самостоятельно, тот по праву может считаться гуру цвета.
Данная статья далека от академичности именно из-за отсутствия данной формулы.
 
Nikolai Semko:
на самом деле задачка. не из простых.
Но кто сможет решить ее самостоятельно, тот по праву может считаться гуру цвета.

А как? Сам-то экспериментировал? Наверно верхний цвет как фильтр использовать, просчитать каждый компонент (rgb) нижнего слоя пропорционально уровню соответствующего компонента верхнего слоя и прозрачности (определяется сколько чего пройдет с нижнего через верхний).  Потом пересчитать уровни компонентов верхнего в соответствии с непрозрачностью (определяется сколько остается верхнего). В конце посчитать среднее по каждому компоненту нижнего и верхнего слоев (не исходного нижнего и верхнего, а пересчитанных, как написано). Не пробовал.

Ну или просто сложить компоненты пропорционально прозрачности.

Надо поэкспериментировать... интересная задачка.

Причина обращения: