一个简单的二次采样实例,简单的代码,仅供参考,使用简单的AsyncTask实现
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import butterknife.ButterKnife; import butterknife.InjectView; public class MainActivity extends AppCompatActivity { @InjectView(R.id.btn_main) Button btnMain; @InjectView(R.id.iv_main) ImageView ivMain; private String imgUrl="http://img4.imgtn.bdimg.com/it/u=3432487329,2901563519&fm=26&gp=0.jpg"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); //设置点击事件 btnMain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //执行 new MyAsyncTask().execute(imgUrl); } }); } class MyAsyncTask extends AsyncTask<String ,Integer,Bitmap>{ @Override protected Bitmap doInBackground(String... strings) { try { ///创建并连接 URL url=new URL(strings[0]); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode()==HttpURLConnection.HTTP_OK){ //获取输入流 InputStream inputStream = connection.getInputStream(); int len=0; byte[] b=new byte[1024]; ByteArrayOutputStream out=new ByteArrayOutputStream(); while((len=inputStream.read(b))!=-1){ out.write(b,0,len); } out.flush(); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeByteArray(out.toByteArray(),0,out.size(),options); float outHeight = options.outHeight; float outWidth = options.outWidth; int scale= (int) ((outHeight>outWidth?outHeight:outWidth)/100); if (scale<=0)scale=1; options.inSampleSize=1/scale; options.inJustDecodeBounds=false; return BitmapFactory.decodeByteArray(out.toByteArray(),0,out.size(),options); } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap bitmap) { //设置图片 ivMain.setImageBitmap(bitmap); } } }