Merge branch 'subtree'
[fanfix.git] / src / be / nikiroo / utils / ImageUtils.java
index cacff8d5bb3717696f633d2befaef893dbfbca4b..877c8fa8c26b6b8a1a585505cf70f4a37d3d4fc7 100644 (file)
@@ -41,6 +41,52 @@ public abstract class ImageUtils {
        public abstract void saveAsImage(Image img, File target, String format)
                        throws IOException;
 
+       /**
+        * Scale a dimension.
+        * 
+        * 
+        * @param imageWidth
+        *            the actual image width
+        * @param imageHeight
+        *            the actual image height
+        * @param areaWidth
+        *            the base width of the target dimension for snap sizes
+        * @param areaHeight
+        *            the base height of the target dimension for snap sizes
+        * @param zoom
+        *            the zoom factor (ignored on snap mode)
+        * @param snapMode
+        *            NULL for no snap mode, TRUE to snap to width and FALSE for
+        *            snap to height)
+        * 
+        * @return the scaled size, width is [0] and height is [1] (minimum is 1x1)
+        */
+       protected static Integer[] scaleSize(int imageWidth, int imageHeight,
+                       int areaWidth, int areaHeight, double zoom, Boolean snapMode) {
+               int width;
+               int height;
+               if (snapMode == null) {
+                       width = (int) Math.round(imageWidth * zoom);
+                       height = (int) Math.round(imageHeight * zoom);
+               } else if (snapMode) {
+                       width = areaWidth;
+                       height = (int) Math
+                                       .round((((double) areaWidth) / imageWidth) * imageHeight);
+               } else {
+                       height = areaHeight;
+                       width = (int) Math
+                                       .round((((double) areaHeight) / imageHeight) * imageWidth);
+
+               }
+
+               if (width < 1)
+                       width = 1;
+               if (height < 1)
+                       height = 1;
+
+               return new Integer[] { width, height };
+       }
+       
        /**
         * Return the EXIF transformation flag of this image if any.
         * 
@@ -190,6 +236,14 @@ public abstract class ImageUtils {
                return set_flag;
        }
 
+       /**
+        * Check that the class can operate (for instance, that all the required
+        * libraries or frameworks are present).
+        * 
+        * @return TRUE if it works
+        */
+       abstract protected boolean check();
+
        /**
         * Create a new {@link ImageUtils}.
         * 
@@ -199,8 +253,11 @@ public abstract class ImageUtils {
                for (String clazz : new String[] { "be.nikiroo.utils.ui.ImageUtilsAwt",
                                "be.nikiroo.utils.android.ImageUtilsAndroid" }) {
                        try {
-                               return (ImageUtils) SerialUtils.createObject(clazz);
-                       } catch (Exception e) {
+                               ImageUtils obj = (ImageUtils) SerialUtils.createObject(clazz);
+                               if (obj.check()) {
+                                       return obj;
+                               }
+                       } catch (Throwable e) {
                        }
                }