List of usage examples for java.lang Math max
@HotSpotIntrinsicCandidate public static double max(double a, double b)
From source file:Main.java
/** * Creates an approximated cubic gradient using a multi-stop linear gradient. See * <a href="https://plus.google.com/+RomanNurik/posts/2QvHVFWrHZf">this post</a> for more * details.//w w w.j a v a 2 s .co m */ public static Drawable makeCubicGradientScrimDrawable(int baseColor, int numStops, int gravity) { // Generate a cache key by hashing together the inputs, based on the method described in the Effective Java book int cacheKeyHash = baseColor; cacheKeyHash = 31 * cacheKeyHash + numStops; cacheKeyHash = 31 * cacheKeyHash + gravity; Drawable cachedGradient = cubicGradientScrimCache.get(cacheKeyHash); if (cachedGradient != null) { return cachedGradient; } numStops = Math.max(numStops, 2); PaintDrawable paintDrawable = new PaintDrawable(); paintDrawable.setShape(new RectShape()); final int[] stopColors = new int[numStops]; int red = Color.red(baseColor); int green = Color.green(baseColor); int blue = Color.blue(baseColor); int alpha = Color.alpha(baseColor); for (int i = 0; i < numStops; i++) { float x = i * 1f / (numStops - 1); float opacity = Math.max(0, Math.min(1, (float) Math.pow(x, 3))); stopColors[i] = Color.argb((int) (alpha * opacity), red, green, blue); } final float x0, x1, y0, y1; switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { case Gravity.START: x0 = 1; x1 = 0; break; case Gravity.END: x0 = 0; x1 = 1; break; default: x0 = 0; x1 = 0; break; } switch (gravity & Gravity.VERTICAL_GRAVITY_MASK) { case Gravity.TOP: y0 = 1; y1 = 0; break; case Gravity.BOTTOM: y0 = 0; y1 = 1; break; default: y0 = 0; y1 = 0; break; } paintDrawable.setShaderFactory(new ShapeDrawable.ShaderFactory() { @Override public Shader resize(int width, int height) { return new LinearGradient(width * x0, height * y0, width * x1, height * y1, stopColors, null, Shader.TileMode.CLAMP); } }); cubicGradientScrimCache.put(cacheKeyHash, paintDrawable); return paintDrawable; }
From source file:Main.java
/** * A fast blur algorithm. This is not being used. Instead * use render script {RSBlur} as it is fast and uses the GPU for it. * @param sentBitmap/*from w w w .j a v a2 s. c om*/ * @param radius * @return */ public static Bitmap FastBlur(Bitmap sentBitmap, int radius) { Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); if (radius < 1) { return (null); } int w = bitmap.getWidth(); int h = bitmap.getHeight(); int[] pix = new int[w * h]; Log.e(TAG, w + " " + h + " " + pix.length); bitmap.getPixels(pix, 0, w, 0, 0, w, h); int wm = w - 1; int hm = h - 1; int wh = w * h; int div = radius + radius + 1; int r[] = new int[wh]; int g[] = new int[wh]; int b[] = new int[wh]; int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; int vmin[] = new int[Math.max(w, h)]; int divsum = (div + 1) >> 1; divsum *= divsum; int dv[] = new int[256 * divsum]; for (i = 0; i < 256 * divsum; i++) { dv[i] = (i / divsum); } yw = yi = 0; int[][] stack = new int[div][3]; int stackpointer; int stackstart; int[] sir; int rbs; int r1 = radius + 1; int routsum, goutsum, boutsum; int rinsum, ginsum, binsum; for (y = 0; y < h; y++) { rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; for (i = -radius; i <= radius; i++) { p = pix[yi + Math.min(wm, Math.max(i, 0))]; sir = stack[i + radius]; sir[0] = (p & 0xff0000) >> 16; sir[1] = (p & 0x00ff00) >> 8; sir[2] = (p & 0x0000ff); rbs = r1 - Math.abs(i); rsum += sir[0] * rbs; gsum += sir[1] * rbs; bsum += sir[2] * rbs; if (i > 0) { rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; } else { routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; } } stackpointer = radius; for (x = 0; x < w; x++) { r[yi] = dv[rsum]; g[yi] = dv[gsum]; b[yi] = dv[bsum]; rsum -= routsum; gsum -= goutsum; bsum -= boutsum; stackstart = stackpointer - radius + div; sir = stack[stackstart % div]; routsum -= sir[0]; goutsum -= sir[1]; boutsum -= sir[2]; if (y == 0) { vmin[x] = Math.min(x + radius + 1, wm); } p = pix[yw + vmin[x]]; sir[0] = (p & 0xff0000) >> 16; sir[1] = (p & 0x00ff00) >> 8; sir[2] = (p & 0x0000ff); rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; rsum += rinsum; gsum += ginsum; bsum += binsum; stackpointer = (stackpointer + 1) % div; sir = stack[(stackpointer) % div]; routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; rinsum -= sir[0]; ginsum -= sir[1]; binsum -= sir[2]; yi++; } yw += w; } for (x = 0; x < w; x++) { rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; yp = -radius * w; for (i = -radius; i <= radius; i++) { yi = Math.max(0, yp) + x; sir = stack[i + radius]; sir[0] = r[yi]; sir[1] = g[yi]; sir[2] = b[yi]; rbs = r1 - Math.abs(i); rsum += r[yi] * rbs; gsum += g[yi] * rbs; bsum += b[yi] * rbs; if (i > 0) { rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; } else { routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; } if (i < hm) { yp += w; } } yi = x; stackpointer = radius; for (y = 0; y < h; y++) { // Preserve alpha channel: ( 0xff000000 & pix[yi] ) pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; rsum -= routsum; gsum -= goutsum; bsum -= boutsum; stackstart = stackpointer - radius + div; sir = stack[stackstart % div]; routsum -= sir[0]; goutsum -= sir[1]; boutsum -= sir[2]; if (x == 0) { vmin[y] = Math.min(y + r1, hm) * w; } p = x + vmin[y]; sir[0] = r[p]; sir[1] = g[p]; sir[2] = b[p]; rinsum += sir[0]; ginsum += sir[1]; binsum += sir[2]; rsum += rinsum; gsum += ginsum; bsum += binsum; stackpointer = (stackpointer + 1) % div; sir = stack[stackpointer]; routsum += sir[0]; goutsum += sir[1]; boutsum += sir[2]; rinsum -= sir[0]; ginsum -= sir[1]; binsum -= sir[2]; yi += w; } } Log.e(TAG, w + " " + h + " " + pix.length); bitmap.setPixels(pix, 0, w, 0, 0, w, h); return (bitmap); }
From source file:Main.java
/** * Transform source Bitmap to targeted width and height. */// w w w .j av a 2s. c om private static Bitmap transform(Matrix scaler, Bitmap source, int targetWidth, int targetHeight, boolean recycle) { float bitmapWidthF = source.getWidth(); float bitmapHeightF = source.getHeight(); float bitmapAspect = bitmapWidthF / bitmapHeightF; float viewAspect = (float) targetWidth / targetHeight; if (bitmapAspect > viewAspect) { float scale = targetHeight / bitmapHeightF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } else { float scale = targetWidth / bitmapWidthF; if (scale < .9F || scale > 1F) { scaler.setScale(scale, scale); } else { scaler = null; } } Bitmap b1; if (scaler != null) { // this is used for minithumb and crop, so we want to filter here. b1 = Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), scaler, true); } else { b1 = source; } if (recycle && b1 != source) { source.recycle(); } int dx1 = Math.max(0, b1.getWidth() - targetWidth); int dy1 = Math.max(0, b1.getHeight() - targetHeight); Bitmap b2 = Bitmap.createBitmap(b1, dx1 / 2, dy1 / 2, targetWidth, targetHeight, null, true); if (b2 != b1) { if (recycle || b1 != source) { b1.recycle(); } } return b2; }
From source file:WeakHashSet.java
public WeakHashSet(Collection c) { map = new WeakHashMap(Math.max((int) (c.size() / .75f) + 1, 16)); addAll(c); }
From source file:Main.java
/** * Methode permettant de splitter une liste en un certain nombre de sous-listes * @param list Liste originale/*from w w w. ja va2 s . co m*/ * @param subListNumber Nombre de sous-listes souhaitees * @return Liste de sous-liste splittee */ public static <T> List<List<T>> splitList(List<T> list, int subListNumber) { // Liste a retourner List<List<T>> splitted = new ArrayList<List<T>>(); // Si la liste est vide if (list == null || list.size() == 0) return splitted; // Taille de la liste int listSize = list.size(); // Nombre d'elements de la liste int subSize = Math.max(listSize / (subListNumber - 1), 1); // Parcours de la liste a splitter for (int i = 0; i < listSize; i += subSize) { // Ajout de la sous-liste splitted.add(new ArrayList<T>(list.subList(i, Math.min(listSize, i + subSize)))); } // On retourne la liste des sous-listes return splitted; }
From source file:Main.java
/** * Determine the maximum size for a 2-state button with the specified text and icons. * This can be used to make sure that a button doesn't resize during state change. * * @param button the UI of this JButton is used for size determination * @param string1 text for 1st mode/*from www .j a v a 2s.com*/ * @param icon1 icon for 1st mode * @param string2 text for 2nd mode * @param icon2 icon for 2nd mode * @return the Dimension that contains both modes for the button. */ public static Dimension getMaxDimension(JButton button, String string1, ImageIcon icon1, String string2, ImageIcon icon2) { String originalText = button.getText(); Icon originalIcon = button.getIcon(); // Get dimensions for "Play" state button.setText(string1); button.setIcon(icon1); Dimension playSize = button.getUI().getPreferredSize(button); // Get dimensions for "Pause" state button.setText(string2); button.setIcon(icon2); Dimension pauseSize = button.getUI().getPreferredSize(button); // Restore original text and icon button.setText(originalText); button.setIcon(originalIcon); // Return max dimensions int maxWidth = (int) Math.max(playSize.getWidth(), pauseSize.getWidth()); int maxHeight = (int) Math.max(playSize.getHeight(), pauseSize.getHeight()); return new Dimension(maxWidth, maxHeight); }
From source file:Main.java
public static void outputArrays(final Object first, final Object second) { if (!first.getClass().isArray()) { throw new IllegalArgumentException("first is not an array."); }// w w w . j av a 2 s. c o m if (!second.getClass().isArray()) { throw new IllegalArgumentException("second is not an array."); } final int lengthFirst = Array.getLength(first); final int lengthSecond = Array.getLength(second); final int length = Math.max(lengthFirst, lengthSecond); for (int idx = 0; idx < length; idx++) { System.out.print("[" + idx + "]\t"); if (idx < lengthFirst) { System.out.print(Array.get(first, idx) + "\t\t"); } else { System.out.print("\t\t"); } if (idx < lengthSecond) { System.out.print(Array.get(second, idx) + "\t"); } System.out.println(); } }
From source file:Main.java
public static void setTickMarkers(JSlider slider) { final int min = slider.getMinimum(); final int max = slider.getMaximum(); final int delta = max - min; if (delta > 0) { final int sliderSize; if (slider.getOrientation() == SwingConstants.HORIZONTAL) sliderSize = slider.getPreferredSize().width; else//from w ww .j av a 2s .c o m sliderSize = slider.getPreferredSize().height; // adjust ticks space on slider final int majTick = findBestMajTickSpace(sliderSize, delta); slider.setMinorTickSpacing(Math.max(1, majTick / 5)); slider.setMajorTickSpacing(majTick); slider.setLabelTable(slider.createStandardLabels(slider.getMajorTickSpacing(), majTick)); } }
From source file:Main.java
public static Bitmap tryToGetBitmapFromInternet(String bitmapUrl, Context context, int imageSize) { if (null != bitmapUrl) { InputStream inputStream = null; try {/*from ww w.j av a 2 s .c o m*/ URL url = new URL(bitmapUrl); URLConnection connection = url.openConnection(); connection.connect(); inputStream = connection.getInputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int read; while ((read = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, read); } inputStream.close(); byteArrayOutputStream.close(); buffer = byteArrayOutputStream.toByteArray(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeByteArray(buffer, 0, buffer.length, options); int maxSize = Math.max(options.outWidth, options.outHeight); float newImageScale = 1f; if (-1 != imageSize) { newImageScale = maxSize / (imageSize * context.getResources().getDisplayMetrics().density); } options.inJustDecodeBounds = false; options.inSampleSize = Math.round(newImageScale); return BitmapFactory.decodeByteArray(buffer, 0, buffer.length, options); } catch (Throwable e) { // pass } finally { if (null != inputStream) { try { inputStream.close(); } catch (IOException e) { // pass } inputStream = null; } System.gc(); } } return null; }
From source file:Main.java
/** * Computes a reasonable number of labels for a data range. * //from w w w.j av a2 s .co m * @param start start value * @param end final value * @param approxNumLabels desired number of labels * @return double[] array containing {start value, end value, increment} */ private static double[] computeLabels(final double start, final double end, final int approxNumLabels, double minimumJump) { if (Math.abs(start - end) < 0.0000001f) { return new double[] { start, start, 0 }; } double s = start; double e = end; boolean switched = false; if (s > e) { switched = true; double tmp = s; s = e; e = tmp; } double xStep = roundUp(Math.max(Math.abs(s - e) / approxNumLabels, minimumJump)); // Compute x starting point so it is a multiple of xStep. double xStart = xStep * Math.ceil(s / xStep); double xEnd = xStep * Math.floor(e / xStep); if (switched) { return new double[] { xEnd, xStart, -1.0 * xStep }; } return new double[] { xStart, xEnd, xStep }; }