NullPointer压缩位图图像时

时间:2016-11-04 02:56:24

标签: java android

我正在尝试从图库中获取图像或使用相机在Android中拍摄。拿一个使用相机应用程序工作得很好,但从画廊获取图像时,压缩时会返回nullpointer。下面显示了我从画廊和相机中选择的代码

@Override
protected void onActivityResult(int requestCode, int resultCode, @NonNull Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST1) {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

            File destination = new File(Environment.getExternalStorageDirectory(),
                    System.currentTimeMillis() + ".jpg");

            FileOutputStream fo;
            try {
                destination.createNewFile();
                fo = new FileOutputStream(destination);
                fo.write(bytes.toByteArray());
                fo.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            image_String = SessionManager.encodeTobase64(thumbnail);
            Log.d("bm", image_String.toString());
            profile_pic.setImageBitmap(thumbnail);

        } else if (requestCode == SELECT_FILE1) {
            Uri selectedImageUri = data.getData();
            String[] projection = {MediaStore.MediaColumns.DATA};
            Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null,
                    null);
            int column_index = cursor.getColumnIndexOrThrow(projection[0]);
            cursor.moveToFirst();

            String selectedImagePath = cursor.getString(column_index);
            cursor.close();

            Bitmap bm;
            BitmapFactory.Options options = new BitmapFactory.Options();
 //         options.inJustDecodeBounds = true;
 //         BitmapFactory.decodeFile(selectedImagePath, options);
            final int REQUIRED_SIZE = 200;
            int scale = 1;
            while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                    && options.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;
            options.inSampleSize = scale;
            bm = BitmapFactory.decodeFile(selectedImagePath, options);
            image_String = SessionManager.encodeTobase64(bm);
            Log.d("bm", image_String.toString());
            profile_pic.setImageBitmap(bm);
        }
    }
}

这是我的mothhod来执行我刚刚获得的行李的编码

public static String encodeTobase64(Bitmap img){
    Bitmap image = img;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    byte[] b = baos.toByteArray();
    String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);

    return imageEncoded;
}

无法弄清楚编码方法在压缩从设备库中取得的位图时发出错误信号。请帮帮我

0 个答案:

没有答案