【问题】
graphics画原图容易做到,怎么绘制缩小到1/4或是放大到四倍的图像?
【关键】
使用BufferedImage..getScaledInstance进行图像缩放。
【有图有真相】
【代码】
package test230505; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; /** * 图像缩放在JFrame中显示示例 * */ public class ScaledImgFrame extends JFrame{ private static final long serialVersionUID = 7431267380511524244L; public final static int W=800; public final static int H=600; public void paint(Graphics g) { final Font Song16=new Font("宋体", Font.PLAIN, 16); final Color Golden_Color=new Color(204, 119, 39); // 画黑色背景 g.setColor(Color.black); g.fillRect(0, 0, W, H); ImageIcon icon = new ImageIcon("knight.png"); int iconWidth = icon.getIconWidth(); int iconHeight = icon.getIconHeight(); g.setColor(Golden_Color); g.setFont(Song16); // 绘制原图 Image original=icon.getImage(); g.drawImage(original, 50, 50, iconWidth, iconHeight, null); g.drawString("原图", 50, 50); try { BufferedImage src = ImageIO.read(new File("knight.png")); // 绘制缩小到1/4的图像 Image smaller = src.getScaledInstance(iconWidth/2, iconHeight/2, Image.SCALE_DEFAULT); g.drawImage(smaller, 150, 350, iconWidth/2, iconHeight/2, null); g.drawString("缩小图", 150, 350); // 绘制放大到4倍的图像 Image bigger = src.getScaledInstance(iconWidth*2, iconHeight*2, Image.SCALE_DEFAULT); g.drawImage(bigger, 350, 350, iconWidth*2, iconHeight*2, null); g.drawString("放大图", 350, 350); }catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { ScaledImgFrame fm=new ScaledImgFrame(); fm.setTitle("ScaledImgFrame");// 设置标题 fm.setLocation(10,20);// 设置左上角位置 fm.setSize(ScaledImgFrame.W, ScaledImgFrame.H);// 设置宽高 fm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置缺省关闭操作 fm.setVisible(true);// 设置窗格可见 } }
END