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...
Miei appunti liberi, senza pretesa di dire necessariamente sempre cose giuste o sensate, durante l'apprendimento e la pratica della programmazione
JavascriptProva
domenica 10 gennaio 2016
Esercizio sull'elaborazione di un'immagine mediante AsyncTask.
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento