开发者

Android:Problem in getting image from specified path

开发者 https://www.devze.com 2023-03-25 20:44 出处:网络
I have an app from which i have to capture an image from camera activity and using content resolver i have insert that image to media.EXTERNAL_CONTENT_URI and i have getString() the path of that image

I have an app from which i have to capture an image from camera activity and using content resolver i have insert that image to media.EXTERNAL_CONTENT_URI and i have getString() the path of that image and passed it to bundle in other activity.

from there,I have get that path and put it in Bitmap bit开发者_如何转开发map = BitmapFactory.decodeFile(filepath);

but it's showing FILENOTFOUNDEXCEPTION and NULLPOINTEREXCEPTION.How to resolve that?

so I am also trying another approach such that the image i got in first activity should first be set to a file and then i decode that file easily?

please suggest me the way to do that.

UPDATES-->

CODE: `//pass image path to other activity`

case PICK_FROM_CAMERA : if (resultCode == RESULT_OK)
            { 
                ContentValues values = new ContentValues();
                values.put(Images.Media.TITLE, "title");
                values.put(Images.Media.BUCKET_ID, "test");
                values.put(Images.Media.DESCRIPTION, "test Image taken");
                values.put(Images.Media.MIME_TYPE,"image/jpeg");       
                Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
                filepath = uri.getPath();
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                //((ImageView)findViewById(R.id.selectedimage)).setImageBitmap(photo);
                OutputStream outstream;
                try 
                {
                    outstream = getContentResolver().openOutputStream(uri);
                    photo.compress(Bitmap.CompressFormat.JPEG,100,outstream);
                    outstream.close();
                }
                catch (FileNotFoundException e) {}
                catch (IOException e) {}
                Intent intent = new Intent(this.getApplicationContext(),AnimationActivity.class);
                Bundle bundle = new Bundle();
                bundle.putInt("flag", 0);
                bundle.putString("filepath", filepath);
                intent.putExtras(bundle);
                startActivity(intent);
            }


Code: //show that image 

public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView img = (ImageView)findViewById(R.id.background);    
        Bitmap border = BitmapFactory.decodeResource(getResources(),R.drawable.border1);
        Bundle extra = getIntent().getExtras();
        mfilepath = extra.getString("filepath");
        int flag = extra.getInt("flag");
        if(flag==1)
        {
            bgr= BitmapFactory.decodeFile(mfilepath);
        }
        if(flag==0)
        {
            bgr=BitmapFactory.decodeFile(mfilepath);

            OutputStream outstream;
            try 
            {
                outstream = getContentResolver().openOutputStream(Uri.fromFile(new File(mfilepath)));
                //bgr.compress(Bitmap.CompressFormat.JPEG,100,outstream);
                outstream.close();
            }
            catch (FileNotFoundException e) {}
            catch (IOException e) {}
        }
        bmOverlay = Bitmap.createBitmap(border.getWidth(),border.getHeight(),bgr.getConfig());
        canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmOverlay, 0, 0, null);
        canvas.drawBitmap(bgr, 0, 0, null); 
        canvas.drawBitmap(border,0,0, null);
        canvas.save(); 
        img.setImageBitmap(bmOverlay);


Try this simple method, I think it should solve your problem.

private void savePicture(String filename, Bitmap b, Context ctx) {
    try {

        FileOutputStream out;
        out = ctx.openFileOutput(filename, Context.MODE_WORLD_READABLE);
        b.compress(Bitmap.CompressFormat.JPEG, 40, out);
        if (b.compress(Bitmap.CompressFormat.JPEG, 40, out) == true)

            out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Edit 1: Although I am not sure exactly what you are asking, I think you might be looking for this method:

private void takePicture() {
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photo = new File(Environment.getExternalStorageDirectory(),
            "Pic.jpg");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
    imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, 0);

}


Use of FileOutputStream instead of OutputStream solved ma problem.

case PICK_FROM_CAMERA : if (resultCode == RESULT_OK)
            { 
                ContentValues values = new ContentValues();
                values.put(Images.Media.TITLE, "title");
                values.put(Images.Media.BUCKET_ID, "test");
                values.put(Images.Media.DESCRIPTION, "test Image taken");
                values.put(Images.Media.MIME_TYPE,"image/jpeg");       
                Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
                filepath = uri.getPath();
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                try 
                {
                    FileOutputStream outstream; =new FileOutputStream(filepath);
                    photo.compress(Bitmap.CompressFormat.JPEG,100,outstream);
                    outstream.close();
                }
                catch (FileNotFoundException e) {}
                catch (IOException e) {}
                Intent intent = new Intent(this.getApplicationContext(),AnimationActivity.class);
                Bundle bundle = new Bundle();
                bundle.putInt("flag", 0);
                bundle.putString("filepath", filepath);
                intent.putExtras(bundle);
                startActivity(intent);
            }


Code: //show that image 

public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView img = (ImageView)findViewById(R.id.background);    
        Bitmap border = BitmapFactory.decodeResource(getResources(),R.drawable.border1);
        Bundle extra = getIntent().getExtras();
        mfilepath = extra.getString("filepath");
        bgr= BitmapFactory.decodeFile(mfilepath);
        bmOverlay = Bitmap.createBitmap(border.getWidth(),border.getHeight(),bgr.getConfig());
        canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmOverlay, 0, 0, null);
        canvas.drawBitmap(bgr, 0, 0, null); 
        canvas.drawBitmap(border,0,0, null);
        canvas.save(); 
        img.setImageBitmap(bmOverlay);
0

精彩评论

暂无评论...
验证码 换一张
取 消