Как нарисовать полупрозрачную цветную маску поверх уже нарисованного на холсте SWT?

Поэтому я хотел бы нарисовать цветную (красную) область поверх существующего рисунка на холсте, как красная тонированная линза, помещенная поверх него, чтобы исходное изображение все еще было видно под ним.

Проблема в том, что я расширяю холст, который рисует свое собственное изображение, и рисую поверх него.

Как я могу это сделать?

3 ответа

Решение

В вашем Canvas paint() метод,

  1. нарисовать изображение
  2. gc.setAlpha(100) // решить вашу ценность
  3. 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);

Другие вопросы по тегам