【问题】
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
该代码示例展示了如何在Java中利用BufferedImage的getScaledInstance方法进行图像的缩放操作,包括将图像缩小至1/4大小和放大至四倍大小,并在JFrame中显示这些缩放后的图像。

810

被折叠的 条评论
为什么被折叠?



