JavascriptProva

domenica 10 gennaio 2016

Esercizio sull'elaborazione di un'immagine mediante AsyncTask.


Un nuovo esercizio di scrittura per un codice che ponga in un'ImageView un'immagine presa dal contenuto della memoria dello smartphone, elaborando l'immagine al di fuori dell'UI mediante AsyncTask.
public class MainActivity extends Activity {
 
 ImageView immagine;
 Button button;
 Intent intent;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  setContentView(R.layout.activity_main);
  immagine=(ImageView)findViewById(R.id.imageView1);
  button=(Button)findViewById(R.id.button1);
  intent=new Intent();
  intent.setAction(Intent.ACTION_PICK);
  intent.setData(Uri.parse("content://media/external/images/media"));
  
  button.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    startActivityForResult(intent,0);
    
   }
  });
  
  
 }
 
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data){
  if(resultCode==RESULT_OK){
   asyncTask async=new asyncTask(immagine);
   async.execute(getPathFromUri(data.getData()));
   
  }
 }
 
 private String getPathFromUri(Uri uri){
  Cursor crs=getContentResolver().query(uri, null, null, null, null);
  crs.moveToFirst();
  int indice=crs.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
  String s=crs.getString(indice);
  crs.close();
  return s;
  
 }
 
 class asyncTask extends AsyncTask<String,Void,Bitmap>{

  WeakReference<ImageView> reference;
  public asyncTask(ImageView img){
   reference=new WeakReference<ImageView>(img);
  }
  @Override
  protected Bitmap doInBackground(String... params) {
   BitmapFactory.Options opzioni=new BitmapFactory.Options();
   opzioni.inJustDecodeBounds=true;
   BitmapFactory.decodeFile(params[0],opzioni);
   int fattore=1;
   while(opzioni.outWidth/fattore>20 && opzioni.outWidth/fattore>20){
    fattore*=2;
   }
   opzioni.inJustDecodeBounds=false;
   opzioni.inSampleSize=fattore;
   Bitmap bmp=BitmapFactory.decodeFile(params[0],opzioni);
   return bmp;
  }
  
  @Override
  protected void onPostExecute(Bitmap bmp){
   if(bmp!=null && reference!=null){
    ImageView immagine=(ImageView)reference.get();
    if(immagine!=null){
     immagine.setImageBitmap(bmp);
    }
   }
  }

  

 } 
Funziona, funziona...

Nessun commento:

Posta un commento