Merge branch 'subtree'
[nikiroo-utils.git] / src / be / nikiroo / utils / ImageUtils.java
index fb869294f2029bd1c0fd7f4a64680259ca4bc4b0..2b8ff8fa9ec722056904d310343761f979285924 100644 (file)
@@ -41,6 +41,53 @@ public abstract class ImageUtils {
        public abstract void saveAsImage(Image img, File target, String format)
                        throws IOException;
 
+       /**
+        * Scale a dimension.
+        * 
+        * @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 imageWidth
+        *            the actual image width
+        * @param imageHeight
+        *            the actual image height
+        * @param zoom
+        *            the zoom factor, or -1 for snap size
+        * @param zoomSnapWidth
+        *            if snap size, TRUE to snap to width (and FALSE, snap to
+        *            height)
+        * 
+        * @return the scaled size, width is [0] and height is [1] (minimum is 1x1)
+        */
+       protected static Integer[] scaleSize(int areaWidth, int areaHeight,
+                       int imageWidth, int imageHeight, double zoom, boolean zoomSnapWidth) {
+               int width;
+               int height;
+               if (zoom > 0) {
+                       width = (int) Math.round(imageWidth * zoom);
+                       height = (int) Math.round(imageHeight * zoom);
+               } else {
+                       if (zoomSnapWidth) {
+                               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.
         *