Question

After many tries of reducing the image size, I could actually succeed; but still my app is failing to work after I try to view an image which I have shrink ed. Here is the code for that -

    package com.example.tg_db1;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.media.MediaPlayer;
    import android.media.MediaRecorder;
    import android.media.ThumbnailUtils;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.Toast;

    public class add_company extends Activity{
        ImageView iv;
        Button b1,b2,b3;
        EditText et1, et2;
        RegistrationAdapter adapter;
        RegistrationOpenHelper helper;

        private static final int REQUEST_CODE = 1;
        private String logopath;
        String imgPath = null;
        private Bitmap ThumbImage;

        //Adding for voice record
        ImageButton play,record,stop;
        private String voicerec=null;
        MediaPlayer mp;
        MediaRecorder mr;

        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.add_company);

            iv = (ImageView)findViewById(R.id.imageView1);
            b1 = (Button)findViewById(R.id.button1);
            b2 = (Button)findViewById(R.id.button2);
            b3 = (Button)findViewById(R.id.button3);
            et1 = (EditText)findViewById(R.id.editText1);
            et2 = (EditText)findViewById(R.id.editText2);

            adapter = new RegistrationAdapter(this);
            iv.setImageDrawable(null);  //Should be blank before selecting the image

        }

        public void browse(View v){
            @SuppressWarnings("unused")
            int id = v.getId();
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            intent.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(intent, REQUEST_CODE);
        }

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

            if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
                Uri imgUri = data.getData();
                logopath = getPath(imgUri);

                //code to check on large image display
                //start
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(logopath);
                int imageHeight = options.outHeight;
                int imageWidth = options.outWidth;
                String imageType = options.outMimeType;

                //iv.setImageBitmap(decodeSampledBitmapFromFile(logopath,125,125));
                //end

                ThumbImage = ThumbnailUtils.extractThumbnail(decodeSampledBitmapFromFile(logopath,125,125), 125, 125);
                iv.setImageBitmap(ThumbImage);

            }
        }

        //to display large image
        //start
        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) {

            // Calculate ratios of height and width to requested height and width
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);

            // Choose the smallest ratio as inSampleSize value, this will guarantee
            // a final image with both dimensions larger than or equal to the
            // requested height and width.
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }

        return inSampleSize;
    }

        public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) 
        {
            // First decode with inJustDecodeBounds=true to check dimensions
            final BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, options);

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

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


        private String getPath(Uri uri) {
            String[] projection = {MediaStore.Images.Media.DATA};
            @SuppressWarnings("deprecation")
            Cursor cursor = managedQuery(uri, projection, null, null, null);
            int col_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(col_index);
        }

        private String imgFilePath() {
            File imgFile = null;
            try {
                imgFile = File.createTempFile("complogo", ".png");
            } catch (IOException e) {
                e.printStackTrace();
            }
            FileOutputStream fOut = null;
            try {
                fOut = new FileOutputStream(imgFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            ThumbImage.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            imgPath = imgFile.getAbsolutePath();
            return imgPath;
        }

        public void reset(View v){
            et1.setText("");
            et2.setText("");
            iv.setImageDrawable(null);  //Image is removed when reset

        }
    }

and the resulting errors from LogCat -

    06-27 16:03:34.380: E/AndroidRuntime(4029): FATAL EXCEPTION: main
    06-27 16:03:34.380: E/AndroidRuntime(4029): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { typ=image/jpeg }} to activity {com.example.tg_db1/com.example.tg_db1.add_company}: java.lang.NullPointerException
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3103)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3146)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread.access$1100(ActivityThread.java:126)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1202)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.os.Looper.loop(Looper.java:137)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread.main(ActivityThread.java:4586)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at java.lang.reflect.Method.invoke(Method.java:511)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at dalvik.system.NativeStart.main(Native Method)
    06-27 16:03:34.380: E/AndroidRuntime(4029): Caused by: java.lang.NullPointerException
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at com.example.tg_db1.add_company.getPath(add_company.java:144)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at com.example.tg_db1.add_company.onActivityResult(add_company.java:79)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3099)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     at android.app.Activity.dispatchActivityResult(Activity.java:4839)
    06-27 16:03:34.380: E/AndroidRuntime(4029):     ... 11 more
    06-27 16:13:19.045: E/AndroidRuntime(4537): FATAL EXCEPTION: main
    06-27 16:13:19.045: E/AndroidRuntime(4537): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent {  }} to activity {com.example.tg_db1/com.example.tg_db1.add_company}: java.lang.NullPointerException
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3103)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3146)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread.access$1100(ActivityThread.java:126)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1202)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.os.Handler.dispatchMessage(Handler.java:99)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.os.Looper.loop(Looper.java:137)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread.main(ActivityThread.java:4586)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at java.lang.reflect.Method.invokeNative(Native Method)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at java.lang.reflect.Method.invoke(Method.java:511)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at dalvik.system.NativeStart.main(Native Method)
    06-27 16:13:19.045: E/AndroidRuntime(4537): Caused by: java.lang.NullPointerException
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at com.example.tg_db1.add_company.getPath(add_company.java:145)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at com.example.tg_db1.add_company.onActivityResult(add_company.java:80)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.Activity.dispatchActivityResult(Activity.java:4839)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3099)
    06-27 16:13:19.045: E/AndroidRuntime(4537):     ... 11 more

Please help. Thanks in advance.

Was it helpful?

Solution

Please try another code and apply your projects..

Please see this link reduce image size

Also another link..this

please use this code ..

private void TakeGalleryImage() {

    Intent i = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    startActivityForResult(i, RESULT_LOAD_IMAGE);

}

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 mFileName= getRealPathFromURI(selectedImage);
        SetImage(mFileName);

    } 

}

public String getRealPathFromURI(Uri contentUri) {

    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(UploadImageActivity.this, contentUri,
            proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();

    String mFileName = cursor.getString(column_index);

    return mFileName;

}

And set Bitmap in imageview

private void SetImage(String filename){

    if (!filename.equals("")) {

        File imgFile = new  File(filename);

        if(imgFile.exists()){

            Bitmap myBitmap = ShrinkBitmap(filename, 125, 125);
            mImgUploadImage.setImageBitmap(myBitmap);
            flag=true;
        }

    }

}

Here your reduce image code

private Bitmap ShrinkBitmap(String file, int width, int height){

 BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
    bmpFactoryOptions.inJustDecodeBounds = true;
    Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);

    int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
    int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);

    if (heightRatio > 1 || widthRatio > 1)
    {
     if (heightRatio > widthRatio)
     {
      bmpFactoryOptions.inSampleSize = heightRatio;
     } else {
      bmpFactoryOptions.inSampleSize = widthRatio; 
     }
    }

    bmpFactoryOptions.inJustDecodeBounds = false;
    bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
 return bitmap;
}

OTHER TIPS

Uri imgUri = data.getData();

i think you are getting null in this line. Check whether imgUri is null or not.Like

if(imgUri==null){ 
  Log.d("Uri","uri is null");
}

Some device gives null for imgUri i don't know why?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top