java - 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();}}
}
解决方案
推荐阅读
- ubuntu - Meteor Svelte 找不到我在 Ubuntu 上创建的文件
- ubuntu - 如何使用 udev 规则自动挂载 USB 块设备?
- travis-ci - 在 GitHub 操作上使用 dpl
- java - 三星键盘退格键不适用于 SearchView
- php - 如何以智能的方式使用 PHP PDO 显示来自 PostgreSQL 的图像
- java - 尽管是数学,但代码打印你好世界
- apache-spark - 在 k8s 集群中 Spark 提交失败
- java - Spring将实体管理器getResultList结果转换为JSON
- java - 如何在使用流比较地图时处理 null - Java?
- sql - 带有 FOR 循环和 IF ELSE 错误的 ORACLE SQL 过程