2012-04-23 129 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

相關問題