Java tutorial
//package com.java2s; /******************************************************************************* * Copyright 2014 Federico Iosue (federico.iosue@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ import android.content.Context; import android.graphics.Bitmap; import android.graphics.Matrix; public class Main { /** * Scales a bitmap to fit required ratio */ @SuppressWarnings("unused") private static Bitmap scaleImage(Context mContext, Bitmap bitmap, int reqWidth, int reqHeight) { // Get current dimensions AND the desired bounding box int width = bitmap.getWidth(); int height = bitmap.getHeight(); int boundingX = dpToPx(mContext, reqWidth); int boundingY = dpToPx(mContext, reqHeight); // Determine how much to scale: the dimension requiring less scaling is // closer to the its side. This way the image always stays inside your // bounding box AND either x/y axis touches it. float xScale = ((float) boundingX) / width; float yScale = ((float) boundingY) / height; float scale = (xScale >= yScale) ? xScale : yScale; // Create a matrix for the scaling and add the scaling data Matrix matrix = new Matrix(); matrix.postScale(scale, scale); // Create a new bitmap and convert it to a format understood by the // ImageView Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); return scaledBitmap; } private static int dpToPx(Context mContext, int dp) { float density = mContext.getResources().getDisplayMetrics().density; return Math.round((float) dp * density); } }