Я пытаюсь вычеркнуть прозрачный овал затухания, чтобы выделить плитку на черепичном экране. К сожалению, я не смог найти реализованную функцию в Swing
, что может сделать это, так что я писал мой собственный:Рисование затухающего прозрачного овала
private void drawGradientedOval(Graphics2D g2d, Rectangle bounds) {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int loops = (int) Math.min(bounds.getWidth()/2, bounds.getHeight()/2);
int x = bounds.x + (int) (bounds.getWidth()/2);
int y = bounds.y + (int) (bounds.getHeight()/2);
int scale = 1;
float alpha = 0.5f;
float step = alpha/loops;
for (int i = 0; i < loops; i++) {
g2d.setColor(new Color(1f, 1f, 1f, alpha));
g2d.drawOval(x--, y--, scale, scale);
scale += 2;
alpha -= step;
}
}
В результате овал выглядит (урожай больше, чем овальные рамки):
Результат не является гладким овалом, есть «крест» и некоторые другие мелкие артефакты.
Я предполагаю, что это вызвано «перекрывающимися» пикселями, которые нарисованы друг над другом.
Есть ли разумный способ крепления этого устройства?
Обратите внимание, что я предпочитаю избегать реализации решения более низкого уровня, например, манипулирования отдельными пикселями на уровне Raster
просто потому, что усилия связаны с огромным количеством переменных, не упомянутых выше.
+1 за усилия, но градиенты решения между цветами. Есть ли способ использовать его с прозрачностью? Решение не должно отменять предыдущие значения пикселей. –
будет устанавливать 'COLORS = {новый цвет (1f, 1f, 1f, 0.5f), новый цвет (1f, 1f, 1f, 0)' работает? –
(1+) для картины @DimaMaligin - 'будет установка .... работать?' Почему вы не пытаетесь? Только вы знаете точное требование. – camickr