Back to project page SpotifyTray-Android.
The source code is released under:
MIT License
If you think the Android project SpotifyTray-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.droidprojects.spotifytray; /*from ww w . j ava 2 s. co m*/ import java.io.IOException; import java.io.InputStream; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.graphics.Canvas; import android.graphics.Path; import android.graphics.Rect; public class Utils { /** * Takes an inputstream, loads a bitmap optimized of space and then crops it for the view. * @param iStream Inputstream to the image. * @param containerHeight Height of the image holder container. * @param containerWidth Width of the image holder container. * @return Cropped/masked bitmap. */ public static Bitmap loadMaskedBitmap(InputStream iStream, int containerHeight, int containerWidth){ // Load image data before loading the image itself. BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeStream(iStream,null,bmOptions); int photoH = bmOptions.outHeight; int photoW = bmOptions.outWidth; // Find a suitable scalefactor to load the smaller bitmap, and then set the options. int scaleFactor = Math.min(photoH/containerHeight, photoW/containerHeight); bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; // Load the square region out of the bitmap. Bitmap bmap=null; BitmapRegionDecoder decoder; try { iStream.reset(); decoder = BitmapRegionDecoder.newInstance(iStream, false); bmap = decoder.decodeRegion(new Rect(0, 0, Math.min(photoH, photoW), Math.min(photoH, photoW)),bmOptions); } catch (IOException e) { e.printStackTrace(); } // Calculate new width of the bitmap based on the width of the container int bitmapNewWidth = (bmap.getWidth()*containerWidth)/containerHeight; // Produce clipping mask on the canvas and draw the bitmap Bitmap targetBitmap = Bitmap.createBitmap(bitmapNewWidth, bmap.getHeight(), bmap.getConfig()); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(bmap.getWidth() / 2, bmap.getHeight() / 2, bmap.getWidth() / 2, Path.Direction.CCW); canvas.clipPath(path); canvas.drawBitmap(bmap, 0, 0, null); // Retrieve the clipped bitmap and return return targetBitmap; } /** * Converts dps to pixels. * @param dp Value in dp. * @param res Resources reference to get the screen density. * @return Value in pixels. */ public static int dpToPixels(int dp, Resources res){ return (int)(res.getDisplayMetrics().density*dp + 0.5f); } }