package com.sgf.tool;

import java.io.FileNotFoundException;
import java.io.InputStream;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.DisplayMetrics;
import android.widget.ImageView;

public final class ImageUtility {
	
	public static Bitmap rotate(Bitmap img, int angle){
		//Declaration des variables
		Matrix matrix = new Matrix();
		
		//Explicitation de l'angle de rotation a la matrice
		matrix.postRotate(angle);
		
		//Renvoie du bitmap avec une rotation
		return Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);
	}
	
	public static int getOrientation(Context context, Uri uri) {

		//Declaration des variables
	    Cursor cursor;
	    
	    //Requete pour connaitre l'orientation de l'image se trouvant a l'URI
	    cursor = context.getContentResolver().query(uri,
	            new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);

	    //Si l'image n'existe pas
	    if (cursor.getCount() != 1) {
	        return -1;
	    }

	    //Le curseur se deplace sur le resultat de la requette
	    cursor.moveToFirst();
	    
	    //Renvoie de l'angle de l'image
	    return cursor.getInt(0);
	}
	
	public static float convertDpToPixel(float dp, Context context){
	    Resources resources = context.getResources();
	    DisplayMetrics metrics = resources.getDisplayMetrics();
	    float px = dp * (metrics.densityDpi / 160f);
	    return px;
	}
	
	public static void display_photo(Context context, ImageView imageView, Uri uri, float dpWidthHope, float dpHeightHope){
		//Declaration des variables
		InputStream imageStream;
        Bitmap photo;
        int orientation;
        float pxWidthHope = convertDpToPixel(dpWidthHope,context);
        float pxHeightHope = convertDpToPixel(dpHeightHope,context);
        
        //Affichage de l'image si possible
		try {
			//Recuperation de l'image se trouvant a l'URI
			imageStream = context.getContentResolver().openInputStream(uri);
			photo = BitmapFactory.decodeStream(imageStream);
			
			//S'il y avait bien une photo a l'URI
			if (photo != null) {
				//Recuperation de l'orientation de l'image
				orientation = getOrientation(context,uri);
				
				//Test si l'orientation est la meme que lors de la prise de la photo
				if(orientation != 0){
					//On tourne l'image pour l'affichage
					photo = rotate(photo,orientation);
				}
				
				//Modification de l'image si necessaire
				if(pxWidthHope > 0 || pxHeightHope > 0){
					photo = resizedBitmap(photo,pxWidthHope,pxHeightHope);
				}
				
				//On affiche la photo
	        	imageView.setImageBitmap(photo);
	        }   
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Bitmap resizedBitmap(Bitmap image, float pxWidthHope, float pxHeightHope) {
		//Declaration des variables
		float width = image.getWidth();
		float height = image.getHeight();
        float widthRatio = width / pxWidthHope;
        float heightRatio = height / pxHeightHope;
        
        //Si le ratio de la largeur est superieur a celle de la hauteur
        //La transformation sera basee sur la largeur
        if (widthRatio > heightRatio) {
            width = pxWidthHope;
            height = (int) (height / widthRatio);
        } else { //Sinon sur la hauteur
            height = pxHeightHope;
            width = (int) (width / heightRatio);
        }
        
        //Renvoie de l'image transforme
        return Bitmap.createScaledBitmap(image, (int)width, (int)height, true);
	}
}

@@ -2055,32 +2055,54 @@
 Hope,context);%0D%0A
+        float pxMax;%0D%0A
         %0D%0A      
@@ -2087,32 +2087,32 @@
 Max;%0D%0A        %0D%0A
-
         //Affich
@@ -2591,24 +2591,343 @@
 ion != 0)%7B%0D%0A
+%09%09%09%09%09%0D%0A%09%09%09%09%09//On pre-reduit l'image avant le changement d'orientation%0D%0A%09%09%09%09%09if(pxWidthHope %3E 0 %7C%7C pxHeightHope %3E 0)%7B%0D%0A%09%09%09%09%09%09%0D%0A%09%09%09%09%09%09if(pxWidthHope %3E pxHeightHope)%7B%0D%0A%09%09%09%09%09%09%09pxMax = pxWidthHope;%0D%0A%09%09%09%09%09%09%7Delse%7B%0D%0A%09%09%09%09%09%09%09pxMax = pxHeightHope;%0D%0A%09%09%09%09%09%09%7D%0D%0A%09%09%09%09%09%09%0D%0A%09%09%09%09%09%09photo = resizedBitmap(photo,pxMax,pxMax);%0D%0A%09%09%09%09%09%7D%0D%0A%09%09%09%09%09%0D%0A
 %09%09%09%09%09//On to
@@ -3059,24 +3059,25 @@
 ire%0D%0A%09%09%09%09if(
+(
 pxWidthHope 
@@ -3092,32 +3092,112 @@
 xHeightHope %3E 0)
+ &&%0D%0A%09%09%09%09%09%09(pxWidthHope %3C photo.getWidth() %7C%7C pxHeightHope %3C photo.getHeight()))
 %7B%0D%0A%09%09%09%09%09photo = 

Fix photo rotation