简体   繁体   中英

Resize a Image Picked from Gallery to Image View

My App have an activity with a ImageView where i pick a picture from phone gallery and set in this ImageView as user's profile picture.

My problem is that some pictures when picked make app stop cause is too big, i want to know if someone can look my code and help me how can i resize this picked picture, so after set in this image view, how can user cut this picture before set, here below is my code where i pic the picture. i will be so greatful if someone do the needed changes and give me the code cause i dont know so much about developing. thank you.

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
        Uri selectedImage = data.getData();
        String[] filePathColumn = { MediaStore.Images.Media.DATA };

        Cursor cursor = getContentResolver().query(selectedImage,
                filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex);
        PreferenceManager.getDefaultSharedPreferences(this).edit().putString("picturePath", picturePath).commit();
        cursor.close();

        ImageView imageView = (ImageView) findViewById(R.id.User);
        imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));

    }

    }

Not gonna rewrite your code but this could be useful

    Bitmap bitmap = BitmapFactory.decodeFile(foto.getFotoOrderFilePath());
    Double height = (double)bitmap.getHeight();
    Double scalingFactor = (960.0/height);
    int tempWidht = bitmap.getWidth();
    Double Dwidth = (tempWidht*scalingFactor);
    int width = Dwidth.intValue();
    Log.v("bitmap dimensions: ", String.valueOf(height) + " + " +String.valueOf(width) + " + " + String.valueOf(scalingFactor));
    bitmap = Utilities.scaleBitmap(bitmap, width, 960);

An excerpt from code I use to scale a bitmap down. It sets the hight to 960 and get the scaling to change the width accordingly.

edit:

the ScaleBitmap method.

public static Bitmap scaleBitmap(Bitmap bitmap, int wantedWidth, int wantedHeight) {
    Bitmap output = Bitmap.createBitmap(wantedWidth, wantedHeight, Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    Matrix m = new Matrix();
    m.setScale((float) wantedWidth / bitmap.getWidth(), (float) wantedHeight / bitmap.getHeight());
    canvas.drawBitmap(bitmap, m, new Paint());
    return output;
}

sorry for the late response

尝试使用像我在我的应用程序中使用过的whtsapp这样的图像压缩https://www.built.io/blog/2013/03/improving-image-compression-what-weve-learned-from-whatsapp/

You can use Picasso library. Get it from here . The syntax looks like this:

Picasso.with(getContext()).load(imagePath).into(imageView);

You can try this code to resize image as per your requirement

public Bitmap decodeSampledBitmapFromResource(String Filepath,
                                                  int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(Filepath, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(Filepath, options);
}

public int calculateInSampleSize(
        BitmapFactory.Options options, int reqWidth, int reqHeight) {

    // Raw height and width of image
    int inSampleSize = 1;
    final int height = options.outHeight;
    final int width = options.outWidth;


    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

check here http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM