我尝试在java中实现一个缩放BufferedImage
的简单示例,但代码不起作用!
如果您对我有其他建议,请分享! :d
这是我的代码,但我想为BufferedImage
扩展实现一个单独的函数。
感谢您的帮助!
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Scale extends JPanel{
public static void main(String []args){
JFrame f = new JFrame();
f.add(new Translation());
f.setSize(750, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paintComponent(Graphics g){
double scaleFactorX = 2.0;
double scaleFactorY = 2.0;
BufferedImage img = null;
BufferedImage image = null;
try {
img = ImageIO.read(new File("img.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, null);
g2d.drawImage(img, 0, 0, img.getWidth() * scaleFactorX, img.getHeight() * scaleFactorY, null);
}
}
答案 0 :(得分:0)
我必须将f.add(new Translation())
更改为f.add(new Scale())
。
使用int
和double
进行计算的结果将导致double
。因此,将计算结果解析为int
,例如img.getWidth() * scaleFactorX
- > (int)(img.getWidth() * scaleFactorX)
。
请参阅以下代码:
public class Scale extends JPanel{
double scaleFactorX = 2.0;//TODO eventually change through constructor?
double scaleFactorY = 2.0;
public static void main(String []args){
JFrame f = new JFrame();
f.add(new Scale());
f.setSize(750, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paintComponent(Graphics g){
scaleImage((Graphics2D) g);//Call separate function
}
//Scales the image from "img.jpg"
private void scaleImage(Graphics2D g) {
BufferedImage img = null;
BufferedImage image = null;//is never used?!
try {
img = ImageIO.read(new File("img.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Graphics2D g2d = g;
if(img != null) {
g2d.drawImage(img, 0, 0, null);
g2d.drawImage(img, 0, 0, (int)(img.getWidth() * scaleFactorX), (int)(img.getHeight() * scaleFactorY), null);
}else{
System.out.println("Image not found!");
}
}
}