1package org.robolectric.shadows;
2
3import android.graphics.Point;
4import java.io.IOException;
5import java.io.InputStream;
6import java.util.Iterator;
7import javax.imageio.ImageIO;
8import javax.imageio.ImageReader;
9import javax.imageio.stream.ImageInputStream;
10
11public class ImageUtil {
12  private static boolean initialized;
13
14  public static Point getImageSizeFromStream(InputStream is) {
15    if (!initialized) {
16      // Stops ImageIO from creating temp files when reading images
17      // from input stream.
18      ImageIO.setUseCache(false);
19      initialized = true;
20    }
21
22    try {
23      ImageInputStream imageStream = ImageIO.createImageInputStream(is);
24      Iterator<ImageReader> readers = ImageIO.getImageReaders(imageStream);
25      if (!readers.hasNext()) return null;
26
27      ImageReader reader = readers.next();
28      try {
29        reader.setInput(imageStream);
30        return new Point(reader.getWidth(0), reader.getHeight(0));
31      } finally {
32        reader.dispose();
33      }
34    } catch (IOException e) {
35      throw new RuntimeException(e);
36    }
37  }
38}
39