Moudiz
Moudiz

Reputation: 7377

resize image with activitytresult

how to resize image with my below code ? the code get image but I didnt how to resize it.

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

               super.onActivityResult(requestCode, resultCode, data);

                if (requestCode == 1 && resultCode == RESULT_OK && data != null && data.getData() != null) {

                    //file name
                    filePath = data.getData();
                    try {
                    //  Bundle extras2 = data.getExtras();
                        bitmap  = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                      //  imageview.setImageBitmap(bitmap);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

                       byte imageInByte[] = stream.toByteArray();

                      Intent i = new Intent(this,
                                AddImage.class);
                      i.putExtra("image", imageInByte);
                      startActivity(i);

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

I read a so queston using this way , but its different then my way

File dir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
Bitmap b= BitmapFactory.decodeFile(PATH_ORIGINAL_IMAGE);
Bitmap out = Bitmap.createScaledBitmap(b, 320, 480, false);

File file = new File(dir, "resize.png");
FileOutputStream fOut;
try {
    fOut = new FileOutputStream(file);
    out.compress(Bitmap.CompressFormat.PNG, 100, fOut);
    fOut.flush();
    fOut.close();
    b.recycle();
    out.recycle();               
} catch (Exception e) {}

Upvotes: 1

Views: 63

Answers (2)

Bhargav
Bhargav

Reputation: 8277

To tell the decoder to subsample the image, loading a smaller version into memory, set inSampleSize to true in your BitmapFactory.Options object. For example, an image with resolution 2048x1536 that is decoded with an inSampleSize of 4 produces a bitmap of approximately 512x384. Loading this into memory uses 0.75MB rather than 12MB for the full image (assuming a bitmap configuration of ARGB_8888). Here’s a method to calculate a sample size value that is a power of two based on a target width and height:

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    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;
}

Taken from here

Upvotes: 0

KURUMADDALI ANURAG
KURUMADDALI ANURAG

Reputation: 106

I would like to suggest you that first set the bitmap image to imageview and apply scale i.e., resize as per your requirement using setScaleType method.

ex: imageview.setScaleType(ScaleType.CENTER);

(or)

If you want to try in same way then I think this link may be help full.

https://argillander.wordpress.com/2011/11/24/scale-image-into-imageview-then-resize-imageview-to-match-the-image/

Upvotes: 1

Related Questions