2012-04-23 4 views
3

ここではかなり初心者ですが、ここに私の問題を説明する小さなテストコードがあります。出力される値は-1です。私はちょうど私のイメージのピクセルの幅を返す方法のわずかな手がかりを持っていない、私はここで非常に明白な何かが欠けている?このImageObserverの全体像は意味をなさない!私は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()は、ほとんどあなたが望むものではない画像を非同期的に読み込む可能性があります。

使用ImageIOともImageObserverパラメータ(あなたがnullを渡した場合、他のものも同様に動作しますが)なしgetWidth()getHeight()を持っている代わりにBufferedImage:あなたは間違ったクラスを使用している

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

素晴らしい答え、ありがとう。 –

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