Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//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 java.io.FileNotFoundException;

import android.content.Context;
import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.net.Uri;

public class Main {
    /**
     * Decodifica ottimizzata per la memoria dei bitmap
     * 
     * @param uri
     *            URI bitmap
     * @param reqWidth
     *            Larghezza richiesta
     * @param reqHeight
     *            Altezza richiesta
     * @return
     * @throws FileNotFoundException
     */
    public static Bitmap decodeSampledFromUri(Context mContext, Uri uri, int reqWidth, int reqHeight)
            throws FileNotFoundException {

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(mContext.getContentResolver().openInputStream(uri), null, options);

        // Setting decode options
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
        options.inJustDecodeBounds = false;

        // Bitmap is now decoded for real using calculated inSampleSize
        Bitmap bmp = BitmapFactory.decodeStream(mContext.getContentResolver().openInputStream(uri), null, options);
        return bmp;
    }

    /**
     * Decoding with inJustDecodeBounds=true to check sampling index without breaking memory
     * @throws FileNotFoundException
     */
    private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight)
            throws FileNotFoundException {

        // Calcolo dell'inSampleSize e delle nuove dimensioni proporzionate
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            final int halfHeight = height / 2;
            final int halfWidth = width / 2;

            // Calculate the largest inSampleSize value 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;
            }

            //         if ( ((halfHeight / inSampleSize) > reqHeight || (halfWidth / inSampleSize) > reqWidth)   
            //            && (halfWidth/halfHeight > 4 || halfHeight/halfWidth > 4) ){
            //            inSampleSize *= 2;
            //         }         
            while ((halfHeight / inSampleSize) > reqHeight * 2 || (halfWidth / inSampleSize) > reqWidth * 2) {
                inSampleSize *= 2;
            }
        }
        return inSampleSize;
    }
}