Нежелательные цветовые полосы в 2D -градиентах JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Нежелательные цветовые полосы в 2D -градиентах Java

Сообщение Anonymous »

Мой код рисует легкий апельсиновый и белый градиент 965x482 и сохраняет его в файл gradient.png . К сожалению, это приводит к цветовой полосе. Я прикрепил код и создал изображение ниже. Я проверил исходный код GradientPaint , и похоже, что он игнорирует любые подсказки рендеринга. Я несколько раз нарисовал градиенты в CSS без каких -либо проблем. Почему Java 2D производит градиент с цветной полосами? Как я могу это исправить? Есть ли какие -либо альтернативные реализации java.awt.paint (может быть, сторонняя сторона) без этой проблемы?

Код: Выделить всё

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

Вернуться в «JAVA»