Как нарисовать полупрозрачную цветную маску поверх уже нарисованного на холсте SWT?
Поэтому я хотел бы нарисовать цветную (красную) область поверх существующего рисунка на холсте, как красная тонированная линза, помещенная поверх него, чтобы исходное изображение все еще было видно под ним.
Проблема в том, что я расширяю холст, который рисует свое собственное изображение, и рисую поверх него.
Как я могу это сделать?
3 ответа
В вашем Canvas paint()
метод,
- нарисовать изображение
gc.setAlpha(100)
// решить вашу ценностьgc.fillRectangle(rect)
//rect это клиентская область холста
Я считаю, что вы должны получить то, что вы ищете.
Наивное решение состоит в том, чтобы добавить SWT.Paint
слушатель события Canvas
, так как это может столкнуться с проблемами, так как мы не знаем последовательность обращений к слушателям (взгляните на EventTable.hook()
который будет использовать старый слот в таблице слушателей перед добавлением в конец таблицы...). Таким образом, оригинальный слушатель может работать до или после вашего слушателя.
Лучшее решение - которое я не пробовал, но считаю, что работает - было бы добавить новое Composite
поверх оригинала Canvas
а затем добавьте ваш слушатель в этот виджет, как любой Paint
слушатель нового Composite
гарантированно работает после всех слушателей на Canvas
сам. Запомни
- добавить
Size
слушательCanvas
чтобы убедиться, что размерComposite
всегда правильно - использование
setBackgroundMode(SWT.INHERIT_FORCE)
наCanvas
Установка альфа-значения на холст только затемняет цвет и не делает его прозрачным. Реальный прозрачный графический интерфейс возможен только с оболочкой, используя shell.setAlpha(x);