#java #graphics
Вопрос:
Я пытаюсь написать функцию прямоугольника заливки для своего проекта. И мне было интересно, как fillRect(int, int, int, int)
java.awt.Graphics
реализован метод класса Java. Я попытался найти исходный код, щелкнув правой кнопкой мыши в программе Java и «Открыть объявление» (в среде IDE eclipse), но все, что я могу найти, — это абстрактное объявление метода.
В принципе, я хочу знать, как простой Java-код, подобный этому:
protected void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(10, 10, 620, 460);
}
можно создать зеленый прямоугольник, подобный включенному в окне ниже:
Я знаю только два метода заполнения формы : алгоритмы заливки и заполнения границ . Проблема с ними заключается в том, что им обоим нужны существующие границы (монохромные для заполнения границ и моно-или полихромные для заполнения заливкой).
так что с алгоритмом заполнения границ это будет что-то вроде :
void fillRect(int x, int y, int w, int h){
drawLine(x, y, x w, y); // Draw top boundary
drawLine(x, y h, x w, y h); // Draw bottom boundary
drawLine(x, y, x, y h); // Draw left boundary
drawLine(x w, y, x w, y h); // Draw right boundary
boundaryFill4D(x 1, y 1, GREEN, GREEN); // for simplicity I'm hardcoding color
}
void boundaryFill4D(int x, int y, int fill_color, int boundary_color)
{
if(getpixel(x, y) != boundary_color amp;amp;
getpixel(x, y) != fill_color)
{
putpixel(x, y, fill_color);
boundaryFill4D(x 1, y, fill_color, boundary_color);
boundaryFill4D(x, y 1, fill_color, boundary_color);
boundaryFill4D(x - 1, y, fill_color, boundary_color);
boundaryFill4D(x, y - 1, fill_color, boundary_color);
}
}
Как вы можете видеть из этого примера, мне пришлось сначала нарисовать 4 стороны, прежде чем я смог «заполнить ведро» очерченным прямоугольником. Мне было интересно, есть ли лучший способ сделать это.
Комментарии:
1. Я предполагаю, что это зависит от операционной системы. Вот графика Windows. Метод FillRectangle .
2. @GilbertLeBlanc приведенные примеры не показывают, из какого алгоритма/набора инструкций сделан прямоугольник заливки. это просто документирование использования метода.
3. Я предполагаю, что видеопамять модифицируется напрямую, используя любую формулу, которая является самой быстрой.