Java 修复由2D数组生成的BuffereImage的锯齿边

Java 修复由2D数组生成的BuffereImage的锯齿边,java,arrays,graphics,bufferedimage,antialiasing,Java,Arrays,Graphics,Bufferedimage,Antialiasing,我试图用存储在2D数组中的颜色数据制作BuffereImage。这是可行的,但我想知道是否有一种简单的方法来修复锯齿状的边缘 我猜这可能是一个API或一个简单的技巧,但我一直在看大量的Java文档,但都没有用。Vector Magic确实可以实现我想要的功能,但我想自己学习如何编写代码。如果您对一种快速“打开”抗锯齿功能感兴趣,那么您可能可以利用Java2D API来实现。您可以通过调用以的形式传递选项。可用提示之一是请求抗锯齿 下面的代码示例显示了两个窗口,它们都绘制了相同的圆,一个窗口禁用

我试图用存储在2D数组中的颜色数据制作BuffereImage。这是可行的,但我想知道是否有一种简单的方法来修复锯齿状的边缘


我猜这可能是一个API或一个简单的技巧,但我一直在看大量的Java文档,但都没有用。Vector Magic确实可以实现我想要的功能,但我想自己学习如何编写代码。

如果您对一种快速“打开”抗锯齿功能感兴趣,那么您可能可以利用Java2D API来实现。您可以通过调用以的形式传递选项。可用提示之一是请求抗锯齿

下面的代码示例显示了两个窗口,它们都绘制了相同的圆,一个窗口禁用了抗锯齿选项,另一个窗口启用了抗锯齿选项。如果仔细观察,您会发现使用抗锯齿渲染提示生成的图像不那么粗糙

testionaliasing.java 使用
javac testatiliasingpanel.java编译,然后使用
java testatiliasingpanel
运行

…但我想学习如何自己编写代码


如果您真的对学习如何编写缓冲区操作代码来直接进行抗锯齿感兴趣,那么这是一个需要外部研究的大课题。作为起点,.

图像处理绝不简单。您需要搜索的术语是抗锯齿。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestAntiAliasingPanel extends JPanel {

    private final RenderingHints rh;

    private TestAntiAliasingPanel(RenderingHints rh) {
        this.rh = rh;
    }

    @Override
    public void paint(Graphics g) {
        BufferedImage bufferedImage = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = (Graphics2D)bufferedImage.getGraphics();
        g2.setRenderingHints(rh);
        g2.setColor(Color.BLUE);
        g2.fillOval(50, 50, 300, 300);
        g.drawImage(bufferedImage, 50, 50, this);
    }

    public static void main(String[] args) {
        createFrameWithAntiAliasingOption(false);
        createFrameWithAntiAliasingOption(true);
    }

    private static void createFrameWithAntiAliasingOption(boolean antiAliasingOption) {
        RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                antiAliasingOption ? RenderingHints.VALUE_ANTIALIAS_ON :
                RenderingHints.VALUE_ANTIALIAS_OFF);
        JFrame frame = new JFrame();
        frame.getContentPane().add(new TestAntiAliasingPanel(rh));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}