首页 > 解决方案 > java BufferedImage 质量下降

问题描述

在下面的代码中,使用 JLabel 的 paintComponent 方法在 JFrame 的左侧绘制了两条线。该程序还运行一个方法,该方法创建一个 BufferedImage 并在其上绘制两条线。然后将 BufferedImage 绘制到屏幕的右侧。创建 BufferedImage 的方法遵循与paintComponent 方法相同的过程,但是很明显,与paintComponent 方法相比,BufferedImage 损失了大量的质量。

package pack;

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.JLabel;

public class Test extends JFrame{

    private static final long serialVersionUID = 1L;

    BufferedImage img = new BufferedImage(250, 500, BufferedImage.TYPE_4BYTE_ABGR);

    public Test() {

        convertToImage();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(700, 700);
        setVisible(true);
        setContentPane(new label());

    }

    public class label extends JLabel {
        private static final long serialVersionUID = 1L;
        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setColor(Color.BLACK);
            g2d.drawLine(100, 100, 250, 250);
            g2d.drawLine(150, 350, 150, 500);
            g2d.drawImage(img, 300, 0, 250, 500, null);
        }
    }

    public void convertToImage() {
        BufferedImage image = img;
        Graphics2D g2d = image.createGraphics();
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setColor(Color.BLACK);
        g2d.drawLine(100, 100, 250, 250);
        g2d.drawLine(150, 350, 150, 500);
        img = image;
    }

    public static class Main {public static void main(String[] args) {new Test();}}
}

在此处输入图像描述

标签: javagraphicsbufferedimagegraphics2d

解决方案


推荐阅读