X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/0b7c37671fe97fafaa177cbea22a1d169d52deb8..c20041d157baebede8e47a5f6837ba7dd51204f7:/src/com/owncloud/android/utils/BitmapUtils.java diff --git a/src/com/owncloud/android/utils/BitmapUtils.java b/src/com/owncloud/android/utils/BitmapUtils.java index 70367278..7af6960f 100644 --- a/src/com/owncloud/android/utils/BitmapUtils.java +++ b/src/com/owncloud/android/utils/BitmapUtils.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2014 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -23,11 +26,13 @@ import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.graphics.BitmapFactory.Options; import android.media.ExifInterface; +import android.net.Uri; +import android.webkit.MimeTypeMap; + +import java.io.File; /** * Utility class with methods for decoding Bitmaps. - * - * @author David A. Velasco */ public class BitmapUtils { @@ -90,7 +95,9 @@ public class BitmapUtils { if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2; final int halfWidth = width / 2; - + + // calculates the largest inSampleSize value (for smallest sample) that is a power of 2 and keeps both + // height and width **larger** than the requested height and width. while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) { inSampleSize *= 2; @@ -169,6 +176,58 @@ public class BitmapUtils { } return resultBitmap; } + + /** + * Converts an HSL color value to RGB. Conversion formula + * adapted from http://en.wikipedia.org/wiki/HSL_color_space. + * Assumes h, s, and l are contained in the set [0, 1] and + * returns r, g, and b in the set [0, 255]. + * from: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c + * + * @param integer h The hue + * @param Integer s The saturation + * @param Integer l The lightness + * @return Array The RGB representation + */ + public static int[] hslToRgb(Double h, Double s, Double l){ + Double r, g, b; + + if(s == 0){ + r = g = b = l; // achromatic + } else { + Double q = l < 0.5 ? l * (1 + s) : l + s - l * s; + Double p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3) * 255; + g = hue2rgb(p, q, h) * 255; + b = hue2rgb(p, q, h - 1/3) * 255; + } + + + int[] array = {r.intValue(), g.intValue(), b.intValue()}; + return array; + } + + private static Double hue2rgb(Double p, Double q, Double t){ + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + /** + * Checks if file passed is an image + * @param file + * @return true/false + */ + public static boolean isImage(File file) { + Uri selectedUri = Uri.fromFile(file); + String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString().toLowerCase()); + String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension); + + return (mimeType != null && mimeType.startsWith("image/")); + } }