Код: Выделить всё
package example;
import static java.awt.RenderingHints.KEY_ANTIALIASING;
import static java.awt.RenderingHints.KEY_COLOR_RENDERING;
import static java.awt.RenderingHints.KEY_DITHERING;
import static java.awt.RenderingHints.KEY_RENDERING;
import static java.awt.RenderingHints.VALUE_ANTIALIAS_ON;
import static java.awt.RenderingHints.VALUE_COLOR_RENDER_QUALITY;
import static java.awt.RenderingHints.VALUE_DITHER_ENABLE;
import static java.awt.RenderingHints.VALUE_RENDER_QUALITY;
import static java.awt.image.BufferedImage.TYPE_INT_RGB;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class UnwantedColorBanding {
private static final int WIDTH = 965;
private static final int HEIGHT = 482;
private static final File OUTPUT_FILE = new File("gradient.png");
public static void main(String[] args) throws IOException {
var image = new BufferedImage(WIDTH, HEIGHT, TYPE_INT_RGB);
var g = image.createGraphics();
g.setPaint(new GradientPaint(0, 0, Color.decode("#f9ddbd"), WIDTH, HEIGHT, Color.WHITE));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setRenderingHint(KEY_RENDERING, VALUE_RENDER_QUALITY);
g.setRenderingHint(KEY_COLOR_RENDERING, VALUE_COLOR_RENDER_QUALITY);
g.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
g.setRenderingHint(KEY_DITHERING, VALUE_DITHER_ENABLE);
ImageIO.write(image, "PNG", OUTPUT_FILE);
}
}

edit : я изменил цвет с черного на светло -оранжевый. С черным градиент выглядел хорошо на других моих устройствах. При легком оранжевом, он имеет полосы на все мои устройства (но как уродливая зависимость от устройства).
edit 2 : Firefox имеет одинаковую проблему. В их трекере ошибок я обнаружил информацию, что отсутствие рассеяния вызывает это: https://bugzilla.mozilla.org/show_bug.cgi?id=627771. Итак, я думаю, Java 2D тоже не реализует.
Подробнее здесь: https://stackoverflow.com/questions/796 ... -gradients