2012-04-23 4 views
3

довольно новичок здесь, но вот небольшой тестовый код, который объясняет мою проблему. Значение, напечатанное, равно -1. Я просто не имею ни малейшего понятия о том, как вернуть ширину пикселя моего изображения, я пропустил что-то очень очевидное здесь? Весь этот объект ImageObserver не имеет смысла !!!Я не понимаю класс изображения! Что я здесь делаю неправильно?

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 и BufferedImage вместо, который также имеет getWidth() и getHeight() без ImageObserver параметра (хотя остальные будут работать так же хорошо, если вы передаете null):

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

Смежные вопросы