Viene presa l'immagine, e sottoposta a questa procedura:
//DA RISORSE A BITMAP public static Bitmap ResourcesToBitmap(Context context,int id, int dimensioni){ BitmapFactory.Options opzioni=new BitmapFactory.Options(); opzioni.inJustDecodeBounds=true; BitmapFactory.decodeResource(context.getResources(),id,opzioni); int fattore=1; while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/fattore>dimensioni){ fattore*=2; } opzioni.inSampleSize=fattore; opzioni.inJustDecodeBounds=false; Bitmap bmp=BitmapFactory.decodeResource(context.getResources(),id,opzioni); return bmp; }Da file, invece:
//DA PATH A BITMAP
public static Bitmap PathToBitmap(String path, int dimensioni){
BitmapFactory.Options opzioni=new BitmapFactory.Options();
opzioni.inJustDecodeBounds=true;
BitmapFactory.decodeFile(path,opzioni);
int fattore=1;
while(opzioni.outWidth/fattore>dimensioni && opzioni.outHeight/dimensioni>dimensioni){
fattore*=2;
}
opzioni.inSampleSize=fattore;
opzioni.inJustDecodeBounds=false;
Bitmap bmp=BitmapFactory.decodeFile(path, opzioni);
return bmp;
}
Ho trovato il banale ma tremendo errore!Ora le immagini caricate da path risultano appena più grandi di quelle caricate da risorse.
Perché?
Vediamo con quali parametri vengono chiamate le funzioni di cui sopra.
Il salvataggio di immagini da risorse avviene tramite la seguente funzione:
private void salvaInDatabase(String etichetta, String categoria, int idImmagine, String tipo, int coordX, int coordY){ JImage jImage=new JImage(); jImage.etichetta=etichetta; jImage.categoria=categoria; jImage.immagine=Funzioni.ResourcesToByteArray(this, idImmagine, 100, 80); jImage.tipo=tipo; jImage.coordX=coordX; jImage.coordY=coordY; helper.save(jImage); }La funzione che fa uso della funzione ResourcesToBitmap(Context context,int id, int dimensioni) viene chiamata dalla funzione ResourcesToByteArray(Context context, int id, int dimensioni,int quality)
public static byte[] ResourcesToByteArray(Context context, int id, int dimensioni,int quality){ return BitmapToByteArray(ResourcesToBitmap(context,id,dimensioni), quality); }La funzione ResourcesToBitmap(Context context,int id, int dimensioni)viene chiamata con i parametri Context context, int id, int dimensioni che sono this,idImmagine,100, mentre la funzione BitmapToByteArray(Bitmap bmp,int quality) ha il parametro Int quality che è 80.
Invece la funzione PathToBitmap(String path, int dimensioni) viene chiamata con i parametri path e dimensioni, che viene usato allo stesso modo che nella funzione ResourcesToBitap.
, e prima di salvarla in un database viene trasformata in byte[] mediante la stessa funzione BitmapToByteArray(Bitmap bmp,int quality), sempre con un parametro quality di 80.
Mah... Le immagini vengono trattate allo stesso modo, e non riesco a spiegarmi perché vengano di dimensione diversa.
Fa nulla, la differenza è di poco...
Nessun commento:
Posta un commento