2012-04-23 97 views
3

这里还是一个新手,但是这里有一个小测试代码来解释我的问题。打印的值是-1。我只是没有丝毫思考如何返回图像的像素宽度,我是否错过了一些非常明显的东西?这整个ImageObserver thingy没有任何意义!我不明白Image类!我在这里做错了什么?

import java.awt.*; 
    import javax.swing.*; 
    import java.awt.event.*; 



    class imagetest2 extends JPanel { 
     Image i =Toolkit.getDefaultToolkit().getImage(/*image*/); 

     public int test(){ 
      int x = i.getWidth(null); 
      return x; 
     } 


    } 

    class imagetest { 
     public static void main(String args[]){ 
      imagetest2 tesst = new imagetest2(); 
      System.out.print(tesst.test()); 
     } 
    } 

回答

5

Toolkit.getDefaultToolkit().getImage()可能异步加载图像,这几乎从来没有你想要的。

使用ImageIOBufferedImage,而不是其中也有getWidth()getHeight()没有ImageObserver参数(但如果你通过null其他的人也能发挥作用):

BufferedImage image = ImageIO.read("/*image*/"); 
int width = image.getWidth(); 
+1

很好的答案,谢谢。 – 2012-04-23 22:00:00

0

你只是使用了错误的类。有一个更简单的方法来实现你想要的,这将做到这一点:

import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.io.File; 
import javax.imageio.ImageIO; 

class ImageTest 
{ 
    BufferedImage img; 

    public static int getWidthFromImage(String filename) 
    { 
     BufferedImage image; 
     int width; 
     try 
     { 
      image = ImageIO.read(new File(filename)); 
      return image.getWidth(); 
     } 
     catch(IOException e) 
     { 
      System.out.println("Something terrible happened! " + e.getMessage()); 
      e.printStackTrace(); 
     } 
     return -1; 
    } 
    public static void main(String args[]) 
    { 
     System.out.print("The width of the image in pixels is: " + getWidthFromImage(args[0])); 
    } 
} 
+0

谢谢你们,这两个答案都很棒!顺便说一句,这个论坛太杂乱了,第一次来这里,它非常混乱!我会代表你们,但显然我不能“投票”呢!我一直在看bufferedimage课,但API让它觉得很可怕,但imageIO真的让事情变得更容易 – Deragon 2012-04-23 22:16:05

相关问题