解决华为手机获取不到图库图片的路径问题

Uri originalUri = data.getData();
Cursor cursor = getContentResolver().query(originalUri, null, null, null, null);

if (cursor != null) {
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
    cursor.close();

    cursor = getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    if (cursor != null) {
        cursor.moveToFirst();
        picturePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
        cursor.close();
    }
    Log.e("zm","picturePath1111:"+picturePath);
}
if(bitmap!=null&&!bitmap.isRecycled()){
    bitmap.recycle();
}

 bitmap = getBitmap(picturePath);
iv_img.setImageBitmap(bitmap);

package cc.angis.jy365.activity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.custom.view.SpinerPopWindow;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.nui.multiphotopicker.model.ImageItem;
import com.nui.multiphotopicker.util.CustomConstants;
import com.zqy.datetimepicker.datedialog.DateTimePickerDialog;
import com.zqy.datetimepicker.datedialog.DateTimePickerDialog.OnDateTimeSetListener;


import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import cc.angis.jy365.appinterface.CreateStudentForClass;
import cc.angis.jy365.appinterface.TCInsertOrTCEdit;
import cc.angis.jy365.db.LightDBHelper;
import cc.angis.jy365.util.GobalConstants;
import cc.angis.ssyy.R;

import static com.networkbench.com.google.gson.internal.a.m.F;


public class CreateActivity extends Activity {
    private ImageView back;
    private EditText conferName;
    private TextView conferTypeAll;
    private TextView conferTypePart;
    private ImageView image1, image2;
    private LinearLayout addPer;
    private LinearLayout conferType;
    private TextView startTime;
    private LinearLayout startTimeLinear;
    private EditText durationTime;
    private EditText conferAddress;
    private EditText conferUnit;
    private EditText conferIntroduction;
    private EditText conferPlan;
    private EditText conferContent;
    private Button publish;

    private TextView conferTypeText;
    private String conferTypeStr = "";
    private ImageView videoConfer;
    private ProgressDialog progress = null;
    private boolean islive = false;//是否视频会议
    private boolean isAll = true;//全体党员
    private long startTimeSec = 0;
    //
    private SpinerPopWindow<String> mSpinerPopWindow;
    private List<String> list;
    private String user_nm;
    private Button bt_select_pic, bt_take_photo;
    private ImageView iv_img;

    String conferNameText;
    String startTimeText;
    String conferAddText;
    String conferUnitText;
    String conferIntroductionText;
    String conferPlanText;
    String conferContentText;
    String picturePath = "";

    private int readTimeOut = 10 * 1000; // 读取超时
    private int connectTimeout = 10 * 1000; // 超时时间
    /***
     * 请求使用多长时间
     */
    private static int requestTime = 0;

    private static final String CHARSET = "utf-8"; // 设置编码

    String tcid = "";
    Bitmap bitmap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create);

        /
        startTimeLinear = (LinearLayout) findViewById(R.id.startTimeLinear);
        videoConfer = (ImageView) findViewById(R.id.videoConfer);
        back = (ImageView) findViewById(R.id.back4);
        conferType = (LinearLayout) findViewById(R.id.conferType);
        conferName = (EditText) findViewById(R.id.conferName);
        conferAddress = (EditText) findViewById(R.id.conferAddress);
        conferUnit = (EditText) findViewById(R.id.conferUnit);
        conferIntroduction = (EditText) findViewById(R.id.conferIntroduction);
        conferPlan = (EditText) findViewById(R.id.conferPlan);
        conferContent = (EditText) findViewById(R.id.conferContent);

        conferTypeAll = (TextView) findViewById(R.id.conferTypeAll);
        conferTypePart = (TextView) findViewById(R.id.conferTypePart);
        startTime = (TextView) findViewById(R.id.startTime);
        durationTime = (EditText) findViewById(R.id.durationTime);

        addPer = (LinearLayout) findViewById(R.id.addPer);
        publish = (Button) findViewById(R.id.publish);
        image1 = (ImageView) findViewById(R.id.image1);
        image2 = (ImageView) findViewById(R.id.image2);
        bt_select_pic = (Button) findViewById(R.id.bt_select_pic);
        bt_take_photo = (Button) findViewById(R.id.bt_take_photo);
        iv_img = (ImageView) findViewById(R.id.iv_img);
        bt_select_pic.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onLocation();
            }
        });
        bt_take_photo.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                onTakePhoto();
            }
        });
        //
        image1.setImageResource(R.drawable.meetsele);
        image2.setImageResource(R.drawable.meet_unsele);
        addPer.setVisibility(View.INVISIBLE);
        //

        back.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                CreateActivity.this.finish();
            }
        });

        videoConfer.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (islive) {
                    islive = false;
                    videoConfer.setImageResource(R.drawable.meet_unsele);
                } else {
                    islive = true;
                    videoConfer.setImageResource(R.drawable.meetsele);
                }
            }
        });

        //下拉框
        conferTypeText = (TextView) findViewById(R.id.conferTypeText);
        list = new ArrayList<String>();
        list.add("支部大会");
        list.add("支部委员会");
        list.add("党小组会");
        list.add("党课");
        list.add("其他");

        conferType.setOnClickListener(clickListener);
        mSpinerPopWindow = new SpinerPopWindow<String>(this, list, itemClickListener);


        startTimeLinear.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(startTime);
            }


        });


        image1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                image1.setImageResource(R.drawable.meetsele);
                image2.setImageResource(R.drawable.meet_unsele);
                addPer.setVisibility(View.INVISIBLE);
                isAll = true;

            }
        });

        image2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                image1.setImageResource(R.drawable.meet_unsele);
                image2.setImageResource(R.drawable.meetsele);
                addPer.setVisibility(View.VISIBLE);
                isAll = false;

            }
        });
        addPer.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(CreateActivity.this, cc.angis.jy365.activity.ChangeUserAcitivity.class);
                startActivityForResult(intent, 1);

            }
        });

        publish.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (conferTypeStr.equals("")) {
                    Toast.makeText(CreateActivity.this, "请选择会议类型", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (startTimeSec == 0) {
                    Toast.makeText(CreateActivity.this, "请选择会议开始时间", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (conferName.getText().toString().equals("")) {
                    Toast.makeText(CreateActivity.this, "请输入会议名称", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (getStopTime().equals("")) {
                    Toast.makeText(CreateActivity.this, "会议时长错误", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(user_nm)) {
                    Toast.makeText(CreateActivity.this, "请添加党组成员", Toast.LENGTH_SHORT).show();
                    return;
                }
                if(picturePath.equals("")||picturePath==null){
                    Toast.makeText(CreateActivity.this, "请选择图片", Toast.LENGTH_SHORT).show();
                    return;
                }
                progress = ProgressDialog.show(CreateActivity.this, "", "正在提交请稍后。。。。", true, true);

                conferNameText = conferName.getText().toString();
                startTimeText = startTime.getText().toString();
                conferAddText = conferAddress.getText().toString();
                conferUnitText = conferUnit.getText().toString();
                conferIntroductionText = conferIntroduction.getText().toString();
                conferPlanText = conferPlan.getText().toString();
                conferContentText = conferContent.getText().toString();
                //new SendDataTask().execute();
                Log.i("zm", "picturePath:" + picturePath);

                //uploadFile(picturePath);
                //RequestParams params = new RequestParams();

                if (getIntent().getStringExtra("toCreateActivity") != null && getIntent().getStringExtra("toCreateActivity").equals("volunteer")) {

                } else {
                    new SendPictureDataTask().execute();
                }


            }
        });


    }

    /*-------------------------------*/
// 拍照上传
    public void onTakePhoto() {
        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        File vFile = new File(Environment.getExternalStorageDirectory()
                + "/myimage/", String.valueOf(System.currentTimeMillis())
                + ".jpg");
        if (!vFile.exists())
        {
            File vDirPath = vFile.getParentFile();
            vDirPath.mkdirs();
        }
        else
        {
            if (vFile.exists())
            {
                vFile.delete();
            }
        }
        picturePath = vFile.getPath();
        Uri cameraUri = Uri.fromFile(vFile);
        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
        startActivityForResult(openCameraIntent, 0);
       /* Uri imageUri = null;
        String fileName = null;
        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        fileName = "image.jpg";

        imageUri = Uri.fromFile(new File(Environment
                .getExternalStorageDirectory(), fileName));
        // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(openCameraIntent, 0);*/
    }

    // 本地上传
    public void onLocation() {
        Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);

        openAlbumIntent.setDataAndType(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
        startActivityForResult(openAlbumIntent, 2);
    }

    /*--------------------------------*/


    public String getStopTime() {

        String duration = durationTime.getText().toString();
        if (duration.equals("")) {
            return "";
        } else {
            String stopTime = getStringDate((startTimeSec + (Integer.parseInt(duration) * 60000)));
            return stopTime.substring(0, stopTime.length() - 3);
        }
    }

    public void showDialog(final TextView textView) {
        DateTimePickerDialog dialog = new DateTimePickerDialog(this,
                System.currentTimeMillis());
        /**
         * 实现接口
         */
        dialog.setOnDateTimeSetListener(new OnDateTimeSetListener() {
            public void OnDateTimeSet(AlertDialog dialog, long date) {
                Toast.makeText(CreateActivity.this, "您输入的日期是:" + getStringDate(date), Toast.LENGTH_LONG).show();
                String dateStr = getStringDate(date);
                startTimeSec = date;
                textView.setText(dateStr.substring(0, dateStr.length() - 3));


            }
        });
        dialog.show();


    }

    /**
     * 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
     */
    public static String getStringDate(Long date) {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = formatter.format(date);
        return dateString;
    }

    
    private class SendUserTask extends AsyncTask<Void, Void, String[]> {
        String tc_id = "";
        int result = 0;

        public SendUserTask(String tc_id) {
            this.tc_id = tc_id;

        }

        ;

        @Override
        protected String[] doInBackground(Void... params) {

            result = new CreateStudentForClass(tc_id, user_nm).connect();

            return null;
        }

        @Override
        protected void onPostExecute(String[] result0) {
            super.onPostExecute(result0);
            progress.dismiss();
            if (result == 1) {
                Toast.makeText(CreateActivity.this, "添加成功!", Toast.LENGTH_LONG).show();
                CreateActivity.this.finish();
            } else {
                Toast.makeText(CreateActivity.this, "添加失败!", Toast.LENGTH_LONG).show();
            }

        }
    }
    /
    


    /**
     * popupwindow显示的ListView的item点击事件
     */
    private OnItemClickListener itemClickListener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            mSpinerPopWindow.dismiss();
            // management.setText(list.get(position));
            conferTypeText.setText(list.get(position).toString());

         /* @[@"14",@"15",@"16",@"17",@"8"];
                @[@"支部大会",@"支部委员会",@"党小组会",@"党课",@"其他分类"];*/

            if (position != 4) {
                conferTypeStr = 14 + position + "";
            } else {
                conferTypeStr = "8";
            }


        }
    };

    /**
     * 显示PopupWindow
     */
    private OnClickListener clickListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.conferType:
                    mSpinerPopWindow.setWidth(conferType.getWidth());
                    mSpinerPopWindow.showAsDropDown(conferType);
                    break;
            }
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 0:
                if (resultCode == -1 && !TextUtils.isEmpty(picturePath))
                {
                    if(bitmap!=null&&!bitmap.isRecycled()){
                        bitmap.recycle();
                    }
                     bitmap = getBitmap(picturePath);
                    iv_img.setImageBitmap(bitmap);

                }

                break;
            case 1:
                if (resultCode == Activity.RESULT_OK) {
                    user_nm = data.getStringExtra("user_nm");
                    if (!user_nm.equals("") && !user_nm.equals(","))
                        user_nm = user_nm.substring(0, user_nm.length() - 1);
                }
                break;
            case 2:

                Uri originalUri = data.getData();
                Cursor cursor = getContentResolver().query(originalUri, null, null, null, null);

                if (cursor != null) {
                    cursor.moveToFirst();
                    String document_id = cursor.getString(0);
                    document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
                    cursor.close();

                    cursor = getContentResolver().query(
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
                    if (cursor != null) {
                        cursor.moveToFirst();
                        picturePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                        cursor.close();
                    }
                    Log.e("zm","picturePath1111:"+picturePath);
                }
                if(bitmap!=null&&!bitmap.isRecycled()){
                    bitmap.recycle();
                }

                 bitmap = getBitmap(picturePath);
                iv_img.setImageBitmap(bitmap);

                break;
        }
    }

    private void uploadFile(String uploadFile) {

        File file = new File(uploadFile);
        String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
        String PREFIX = "--";
        String LINE_END = "\r\n";
        String CONTENT_TYPE = "multipart/form-data"; // 内容类型

        Map<String, String> paramsAnd = new HashMap<String, String>();
        paramsAnd.put("method", "TCInsertOrTCEdit");
        paramsAnd.put("tcid", "0");
        paramsAnd.put("TcName", conferNameText);
        paramsAnd.put("txtEndTime", getStopTime());
        paramsAnd.put("UserID", LightDBHelper.getUserMail(CreateActivity.this));
        paramsAnd.put("txtHostedAdd", conferAddText);
        paramsAnd.put("txtHostedGroup", conferUnitText);
        paramsAnd.put("txtStartTime", startTimeText);
        paramsAnd.put("txtSynopsis", conferContentText);
        paramsAnd.put("tc_ClassTypeID", conferTypeStr);
        paramsAnd.put("tc_ClassCredits", "2");
        paramsAnd.put("tc_Plan", conferPlanText);
        paramsAnd.put("txtRemark", conferIntroductionText);
        paramsAnd.put("islive", islive + "");
        String uploadUrl = GobalConstants.URL.DEFAULTPREFIX;

      /*String uploadUrl = GobalConstants.URL.DEFAULTPREFIX+"?method=TCInsertOrTCEdit"+"&tcid="+0+"&TcName="+conferNameText+"&txtEndTime="+getStopTime()
                +"&UserID="+LightDBHelper.getUserMail(CreateActivity.this)+"&txtHostedAdd="+conferAddText+"&txtHostedGroup="+conferUnitText
            +"&txtStartTime="+startTimeText+"&txtSynopsis="+conferContentText+"&tc_ClassTypeID="+conferTypeStr+"&tc_ClassCredits="+"2"
            +"&tc_Plan="+conferPlanText+"&txtRemark="+conferIntroductionText+"&islive="+ islive;*/
        long requestTime = System.currentTimeMillis();
        long responseTime = 0;

        try {
            URL url = new URL(uploadUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(readTimeOut);
            conn.setConnectTimeout(connectTimeout);
            conn.setDoInput(true); // 允许输入流
            conn.setDoOutput(true); // 允许输出流
            conn.setUseCaches(false); // 不允许使用缓存
            conn.setRequestMethod("POST"); // 请求方式
            conn.setRequestProperty("Charset", CHARSET); // 设置编码
            conn.setRequestProperty("connection", "keep-alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
            conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);
//          conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            /**
             * 当文件不为空,把文件包装并且上传
             */
            if (!file.exists()) {
                Toast.makeText(CreateActivity.this, "文件不存在", Toast.LENGTH_SHORT).show();
            }
            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
            StringBuffer sb = null;
            String params = "";

            /***
             * 以下是用于上传参数
             */
            if (paramsAnd != null && paramsAnd.size() > 0) {
                Iterator<String> it = paramsAnd.keySet().iterator();
                while (it.hasNext()) {
                    sb = null;
                    sb = new StringBuffer();
                    String key = it.next();
                    String value = paramsAnd.get(key);
                    sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
                    sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);
                    sb.append(value).append(LINE_END);
                    params = sb.toString();
                    Log.i("zm", key + "=" + params + "##");
                    dos.write(params.getBytes());
//                  dos.flush();
                }
            }

            sb = null;
            params = null;
            sb = new StringBuffer();
            /**
             * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
             * filename是文件的名字,包含后缀名的 比如:abc.png
             */
            sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
            sb.append("Content-Disposition:form-data; name=\"" + "File"
                    + "\"; filename=\"" + file.getName() + "\"" + LINE_END);
            sb.append("Content-Type:image/pjpeg" + LINE_END); // 这里配置的Content-type很重要的 ,用于服务器端辨别文件的类型的
            sb.append(LINE_END);
            params = sb.toString();
            sb = null;

            Log.i("zm", file.getName() + "=" + params + "##");
            dos.write(params.getBytes());
            /**上传文件*/
            InputStream is = new FileInputStream(file);
            //onUploadProcessListener.initUpload((int)file.length());
            byte[] bytes = new byte[1024];
            int len = 0;
            int curLen = 0;
            while ((len = is.read(bytes)) != -1) {
                curLen += len;
                dos.write(bytes, 0, len);
                //onUploadProcessListener.onUploadProcess(curLen);
            }
            is.close();

            dos.write(LINE_END.getBytes());
            byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes();
            dos.write(end_data);
            dos.flush();
//
//          dos.write(tempOutputStream.toByteArray());
            /**
             * 获取响应码 200=成功 当响应成功,获取响应的流
             */
            int res = conn.getResponseCode();
            responseTime = System.currentTimeMillis();
            this.requestTime = (int) ((responseTime - requestTime) / 1000);
            Log.e("zm", "response code:" + res);
            if (res == 200) {
                Log.e("zm", "request success");
                InputStream input = conn.getInputStream();
                StringBuffer sb1 = new StringBuffer();
                int ss;
                while ((ss = input.read()) != -1) {
                    sb1.append((char) ss);
                }
                String result = sb1.toString();
                Log.i("zm", "result:" + result);
                try {
                    JSONObject js = new JSONObject(result);
                    tcid = js.getString("TCID");
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                return;
            } else {

                return;
            }
        } catch (MalformedURLException e) {

            e.printStackTrace();
            return;
        } catch (IOException e) {

            e.printStackTrace();
            return;
        }

    }

    public String getFileName(String pathandname) {
        return pathandname.substring(pathandname.lastIndexOf(".") + 1);
    }

    private class SendPictureDataTask extends AsyncTask<Void, Void, String[]> {

        @Override
        protected String[] doInBackground(Void... params) {
            uploadFile(picturePath);
            return null;
        }

        @Override
        protected void onPostExecute(String[] result) {
            Log.d("zm", "tcid:" + tcid);
            if (!tcid.equals("")) {
                new SendUserTask(tcid).execute();
            }
            super.onPostExecute(result);
        }
    }


    private Bitmap getBitmap(String uploadFile) {
        try {
            Bitmap bitMap = BitmapFactory.decodeFile(uploadFile);
            if (bitMap.getWidth() * bitMap.getHeight() < 490000) {// Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
                // 'int android.graphics.Bitmap.getWidth()' on a null object reference
                return bitMap;
            }
            //图片允许最大空间   单位:KB
            double maxSize = 300.00;
            //将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] b = baos.toByteArray();
            //将字节换成KB
            double mid = b.length / 1024;
            //判断bitmap占用空间是否大于允许最大空间  如果大于则压缩 小于则不压缩
            if (mid > maxSize) {
                //获取bitmap大小 是允许最大大小的多少倍
                double i = mid / maxSize;
                //开始压缩  此处用到平方根 将宽带和高度压缩掉对应的平方根倍 (1.保持刻度和高度和原bitmap比率一致,压缩后也达到了最大大小占用空间的大小)
                bitMap = zoomImage(bitMap, bitMap.getWidth() / Math.sqrt(i),
                        bitMap.getHeight() / Math.sqrt(i));

            }
            return bitMap;
        }catch (OutOfMemoryError err){
            BitmapFactory.Options opts = new BitmapFactory.Options();
            opts.inSampleSize = 4;
            Bitmap bmp = BitmapFactory.decodeFile(uploadFile, opts);
            return bmp;
        }

    }

    public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
                                   double newHeight) {
        // 获取这个图片的宽和高
        float width = bgimage.getWidth();
        float height = bgimage.getHeight();
        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        // 计算宽高缩放率
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // 缩放图片动作
        matrix.postScale(scaleWidth, scaleHeight);
        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
                (int) height, matrix, true);
        return bitmap;
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值