MissCoder87
MissCoder87

Reputation: 2669

Android Saved images are low quality

I'm taking pictures through the following code and saving to SD card, but the pictures that it produces are such low quality and really bitty even with 100% quality. Maybe bitmap.compress isn't the right way to go (or bitmap at all?!)

Heres my code:

public class TakePhoto extends Activity {

    ImageView iv;

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


        iv = (ImageView) findViewById(R.id.imageView1);

        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, 0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        Bitmap bm = (Bitmap) data.getExtras().get("data");
        Random generator = new Random();
        String randFileName = String.valueOf (generator.nextInt(965) + 32);
        String both = "/mnt/extSdCard/DirectEnquiries/"+ randFileName + ".jpg";
        File imageFile = new File(both);

        writeBitmapToMemory(imageFile, bm);
        iv.setImageBitmap(bm);

    }

    public void writeBitmapToMemory(File file, Bitmap bitmap) {
        FileOutputStream fos;

        try {
            Log.e("Tom", "Starting take stream");
            fos = new FileOutputStream(file);
            Log.e("Tom", "Got stream");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            Log.e("Tom", "Saved Image");
            fos.close();

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


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


        }

    }

}

Upvotes: 1

Views: 6533

Answers (2)

Chirag
Chirag

Reputation: 56925

Please call the below function to capture image from camera.

 private final static String FOLDER_NAME = "YourAppName/Image/";
 private Uri selectedImageUri = null;

public void startCamera() 
    {
        File photo = null;
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
        {
            photo = new File(android.os.Environment.getExternalStorageDirectory(), FOLDER_NAME+File.separator+timeStamp+".png");
        } 
        else 
        {
            photo = new File(getCacheDir(), FOLDER_NAME+File.separator+timeStamp+".png");
        }    
        if (photo != null) 
        {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
            selectedImageUri = Uri.fromFile(photo);
            startActivityForResult(intent, CAPTURE_IMAGE_CALLBACK);
        }
    }

You can get image Uri in selectedImageUri variable . (Image is stored in Sdcard)

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        switch (requestCode) 
        {
            case CAPTURE_IMAGE_CALLBACK:

                break;
          }
     }

Upvotes: 2

Lazy Ninja
Lazy Ninja

Reputation: 22527

Have you tried setting quality in the intent?

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);                
startActivityForResult(intent, 0);

Upvotes: 1

Related Questions