2011-08-05 6 views
0

私はカメラのアクティビティから画像をキャプチャし、コンテンツリゾルバを使用してアプリケーションにメディアを挿入する必要があります。 EXTERNAL_CONTENT_URIと私はそのイメージのパスをgetString()し、他のアクティビティでバンドルに渡しました。Android:指定されたパスから画像を取得する際の問題

そこから、私はそのパスを取得し、それをビットマップに入れます。bitmap = BitmapFactory.decodeFile(filepath);

しかし、FILENOTFOUNDEXCEPTIONとNULLPOINTEREXCEPTIONが表示されています。解決方法

私は最初のアクティビティで取得した画像を最初にファイルに設定してから、そのファイルを簡単にデコードするような別の方法も試していますか?

私にそれを行う方法を教えてください。

更新 - >

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); 
+2

画像をファイルに設定したいですか?どのファイル?どのようなファイルですか? –

+0

いくつかのコードをアップロードしていただけますか?コードなしで伝えるのは非常に難しいです... – Kgrover

+0

私は質問をクリアしました.NWを確認してください... – Geetanjali

答えて

0

たFileOutputStreamを使用する代わりに、OutputStreamのは、ミリアンペアの問題を解決しました。

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); 
1

この簡単な方法を試してみて、私はそれはあなたの問題を解決すべきだと思います。

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

編集1:私はあなたが求めている正確に何かわからないが、私はあなたがこの方法を探しているかもしれないと思う:

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

} 
+0

チェックなしコード – Geetanjali

関連する問題