import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import java.util.Vector;
import java.awt.geom.Point2D;
public class Main {
public Main() {
ImageIcon image = new ImageIcon(getClass().getResource("Raptor.PNG"));
Image i1 =image.getImage();
BufferedImage bimage = new BufferedImage( i1.getWidth(null), i1.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D bg2d = bimage.createGraphics();
bg2d.drawImage(i1,0,0,null);
Image im = bimage.getScaledInstance(200, 200, Image.SCALE_AREA_AVERAGING);
bg2d.dispose();
}
public static void main(String[] args) {
Main m =new Main();
}
}生成的im图形长宽均为-1, 不明白
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import java.util.Vector;
import java.awt.geom.Point2D;
public class Main {
public Main() {
ImageIcon image = new ImageIcon(getClass().getResource("Raptor.PNG"));
Image i1 =image.getImage();
BufferedImage bimage = new BufferedImage( i1.getWidth(null), i1.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D bg2d = bimage.createGraphics();
bg2d.drawImage(i1,0,0,null);
Image im = bimage.getScaledInstance(200, 200, Image.SCALE_AREA_AVERAGING);
bg2d.dispose();
}
public static void main(String[] args) {
Main m =new Main();
}
}生成的im图形长宽均为-1, 不明白
Image i1 =image.getImage();你这问题十之八九出在这俩语句上。系统需要从底层构建出一个image对象来,速度可能比较慢,而程序并不等待构建结束就进行下一步操作,可能等到bg2d.drawImage(i1,0,0,null);这条语句的时候,构建还没完成,自然就draw不上Image了。
解决方法一般是在上两条语句下边,添加一个MediaTracker的对象,使用MediaTracker来等待图像加载完毕再进行其他操作。
//----------------------
这样才行
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;public class Main extends JPanel {
Image i1 = Toolkit.getDefaultToolkit().createImage("D:/vml/images/jxx.gif"); public Main() {
System.out.println(i1.getWidth(this));
} public static void main(String[] args) {
Main m = new Main();
} public void paint(Graphics g) {
g.drawImage(i1, 20, 20, this);
System.out.println(i1.getWidth(this));
}
}
public class PaintFrame extends JFrame { public PaintFrame() {
this.setLayout(new BorderLayout());
this.add(new JPanel() {
public void paintComponent(Graphics g) {
super.paintComponents(g);
ImageIcon image = new ImageIcon(getClass().getResource("Dock.png"));
Image i1 = image.getImage();
System.err.println(i1.getWidth(null));
BufferedImage bimage = new BufferedImage(i1.getWidth(null), i1.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D bg2d = bimage.createGraphics();
bg2d.drawImage(i1, 0, 0, null);
g.drawImage(bimage, 0,0,null);;
Image im = bimage.getScaledInstance(200, 200, Image.SCALE_AREA_AVERAGING);
g.drawImage(im, 0, 0, null);;
bg2d.dispose();
}
});
initComponents(); } public static void main(String[] args) {
PaintFrame m = new PaintFrame();
m.setVisible(true);
} private void initComponents() {
System.currentTimeMillis();
setSize(500, 375);
}}
可以正常运行啊
我用jdk6测试成功,理论上
Image i1 =image.getImage();后调用一次试试。private void waitImage(Image img) {
MediaTracker mt = new MediaTracker(this);
try {
mt.addImage(img, 0);
mt.waitForAll();
} catch (InterruptedException ex) {
ex.printStackTrace();
} finally {
mt.removeImage(img);
}
}
}
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.AffineTransform;
import java.util.Vector;
import java.awt.geom.Point2D;
public class Main {
public Main() {
ImageIcon image = new ImageIcon(getClass().getResource("Raptor.PNG"));
Image i1 =image.getImage();
BufferedImage bimage = new BufferedImage( i1.getWidth(null), i1.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D bg2d = bimage.createGraphics();
------->>>>>>>
bg2d.drawImage(i1,0,0,null);
-------------<<<<
这个地方错了,应该写成----〉〉〉〉bg2d.drawImage(i1,0,0,i1.getWidth(null), i1.getHeight(null),null)
Image im = bimage.getScaledInstance(200, 200, Image.SCALE_AREA_AVERAGING);
bg2d.dispose();
}
public static void main(String[] args) {
Main m =new Main();
}
}