0

我有一个 256 色的 BufferedImage,我想在其上绘制另一个 BufferedImage(> 256 色)。Java 的默认行为是抖动在低颜色模型中无法表示的颜色。我想禁用它(从而选择低颜色模型中可用的下一个最佳颜色),所以我尝试使用 RenderingHints 来指定新的渲染行为,但它不起作用:

public BufferedImage filter(BufferedImage src) {
    BufferedImage convertedImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
    Graphics2D g2d = (Graphics2D) convertedImage.getGraphics();
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
    g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE);
    g2d.drawImage(src, 0, 0, null);
    return convertedImage;
}

想法?

更新:

我通过逐像素绘制新图像解决了这个问题,这可能不是很快,但它可以工作。有关详细信息,请参阅我的答案。

4

1 回答 1

1

我通过逐像素绘制新图像解决了这个问题,这可能不是很快,但它可以工作:

public BufferedImage filter(BufferedImage src) {
    BufferedImage convertedImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);
    for (int x = 0; x < src.getWidth(); x++) {
        for (int y = 0; y < src.getHeight(); y++) {
            convertedImage.setRGB(x, y, src.getRGB(x, y));
        }
    }
    return convertedImage;
}
于 2014-03-24T14:50:32.047 回答