Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Немного о работе с рисунками.


Автор: Domestic Cat 31.1.2005, 20:59
Немного о работе с рисунками.

Вопрос. Почему в таком коде
Код

Image im = Toolkit.getDefaultToolkit().getImage("myImage.gif");
int width = im.getWidth(null);
int height = im.getHeight(null);

width и height получают значение -1?

Ответ. Нужно некоторое время пока Image загрузится. К моменту когда вы запрашиваете параметры рисунка вполне вероятно, что он еще не загружен, поэтому getWidth/Height возвращает -1.
Используйте
Код

  Image im = new ImageIcon("av.gif").getImage();


или

Код

MediaTracker mt = new MediaTracker(this); // this - Component
Image im = Toolkit.getDefaultToolkit().getImage("myImage.gif");
mt.addImage(im, 1); // 1 - ID
try {
      mt.waitForID(1);
} catch (InterruptedException e)
{
      e.printStackTrace();
}


Вопрос. Зачем методам getWidth(), getHeight() передается аргумент (обычно null)?

Ответ. Им передается ссылка на объект ImageObserver; если на момент выполнения запроса getWidth/Height рисунок неполностью загружен, вызываетса метод imageUpdate этого объекта.
Например:

Код

public class Test implements ImageObserver
{
   int width, height;
   test()
   {
       Image i = Toolkit.getDefaultToolkit().getImage("av.gif");
       width = i.getWidth(this);
       height = i.getHeight(this);
       System.out.println("Width = " + width + ", height = " + height);
       try
       {
           Thread.sleep(1000);
       } catch (InterruptedException ie) {}
       System.out.println("Now width = " + width + ", height = " + height);
   }
   
   public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
   {
       this.width = width;
       this.height = height;
       return true;
   }
   
   public static void main(String[] args)
   {
       new Test();
   }
}


Вопрос. Как из Image получить BufferedImage?

Ответ. Есть два способа:
Код

  Image im = new ImageIcon("av.gif").getImage();
  BufferedImage bi = new BufferedImage(im.getWidth(null), im.getHeight(null), BufferedImage.TYPE_INT_RGB);
  bi.getGraphics().drawImage(im, 0, 0, null);


Код

     bi = ImageIO.read(new File("img.gif"));

Автор: AntonSaburov 1.2.2005, 11:37
Может лучше в FAQ ее переместить в AWT &Swing->Графика ?

Автор: Domestic Cat 1.2.2005, 18:28
Я ее вчера поместил в Разное : JAVA-JAVA-002290; думаю ты прав smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)