В настоящее время я работаю над некоторым кодом рендеринга, и я задался вопросом, выполняется ли Graphics2D.draw (Shape) точно так же, как на экране, как на экране. Если это так, есть ли способ проверить, является ли моя фигура (Line2D) на экране?Выполняется ли Graphics2D.draw, если Shape вне экрана?
ответ
Зависит от того, что вы подразумеваете под «точно так же».
Что касается вызовов от draw-something() от вашего кода, они имеют место нормально. Что-то другое, где-то в цепочке рендеринга обнаружено, что форма фактически не попадает в реальную область рендеринга, и никакие пиксели на самом деле не выводятся для фигуры.
Что касается определения того, что что-то находится на экране, это зависит от того, как вы определяете экран. Разумно вы бы определили его как область, описанную вашим объектом Graphics (которая может быть только частью экрана или полностью выключена, черт возьми, это может быть принтер!).
При условии, что вы не изменили область клипа экземпляра Graphics, getClipBounds() дает вам прямоугольник, в котором фактически отображаются графики. Если ваша графика поступает из компонента Swing, вы также можете заменить размеры компонентов для области рендеринга.
Как только у вас есть реальный прямоугольник, вы можете использовать методы, предоставляемые Shape, для обнаружения столкновений (содержит(), intersects() и т. Д.).
«Точно так же» я имел в виду, что нет никакой разницы в производительности, когда дело доходит до визуализации формы вне экрана. – RoiEX
@RoiEX. Различия в производительности могут быть довольно массивными. Прежде чем что-либо на самом деле будет нарисовано, необходимо * проверить, что он действительно находится в области рендеринга, после того как весь буфер памяти, выделенный для графики, имеет ограниченный размер. Рисование снаружи приведет к сбою программы :) Итак, проверка всегда есть, и условно все или часть тяжелой работы пропускаются. – Durandal