Improve ImageUtilsAndroid and ImageUtils check() system
[fanfix.git] / src / be / nikiroo / utils / android / ImageUtilsAndroid.java
index 483c44ff144ec8f705412e85c2c9b428e973999f..d55e602cb89d247e6056caec1f49c9b484de7ed4 100644 (file)
@@ -1,20 +1,35 @@
 package be.nikiroo.utils.android;
 
 import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
 import android.graphics.BitmapFactory;
-import be.nikiroo.utils.Image;
-import be.nikiroo.utils.ImageUtils;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.util.stream.Stream;
+
+import javax.imageio.ImageIO;
+
+import be.nikiroo.utils.Image;
+import be.nikiroo.utils.ImageUtils;
+import be.nikiroo.utils.StringUtils;
 
 /**
- * This class offer some utilities based around images and uses the Android framework.
+ * This class offer some utilities based around images and uses the Android
+ * framework.
  * 
  * @author niki
  */
 public class ImageUtilsAndroid extends ImageUtils {
+       @Override
+       protected boolean check() {
+               // If we can get the class, it means we have access to it
+               Config.ALPHA_8;
+               return true;
+       }
+
        @Override
        public void saveAsImage(Image img, File target, String format)
                        throws IOException {
@@ -59,12 +74,18 @@ public class ImageUtilsAndroid extends ImageUtils {
         *             in case of IO error
         */
        static public Bitmap fromImage(Image img) throws IOException {
-               Bitmap image = BitmapFactory.decodeByteArray(img.getData(), 0,
-                               img.getData().length);
-               if (image == null) {
-                       throw new IOException("Failed to convert input to image");
+               InputStream stream = img.newInputStream();
+               try {
+                       Bitmap image = BitmapFactory.decodeStream(stream);
+                       if (image == null) {
+                               String ssize = StringUtils.formatNumber(img.getSize());
+                               throw new IOException(
+                                               "Failed to convert input to image, size was: " + ssize);
+                       }
+               } finally {
+                       stream.close();
                }
-
+               
                return image;
        }
 }