2016-04-04 3 views
4

私は、カメラで画像を撮るアプリケーションを構築しようとしています。メインアクティビティに戻してImageVewに表示します。写真を撮ったときにSDカードに画像を保存するチュートリアルを見ました。私はファイルを保存することができますが、私は保存された画像の場所を取得することが困難です。Android - 画像を扱う際に、一時的なメモリに保存したり使用したりする方が良いでしょうか?

私はSDカードに画像を保存するのはあまり重要ではないので、あまりにも多くの作業があると思います。

BitMap要素でカメラで撮影した画像を「保存」する方法はありますか? SDカードに保存するよりも効率的ですか?

public class MainActivity extends AppCompatActivity { 
private Uri imgLocation; 
ImageView mImageView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button capture = (Button) findViewById(R.id.am_btn_camera); 
    capture.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

      imgLocation = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "fname_" + 
        String.valueOf(System.currentTimeMillis()) + ".jpg")); 

      intent.putExtra(MediaStore.EXTRA_OUTPUT, imgLocation); 
      startActivityForResult(intent, 1); 
     } 
    }); 
} 

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

    if (requestCode == 1 && resultCode == RESULT_OK) { 

     Log.e("URI",imgLocation.toString()); 
     mImageView.setImageBitmap(BitmapFactory.decodeFile(imgLocation.toString())); 
    } 
}} 
+0

ビットマップをシングルトンに格納するなどのメモリ内ソリューションを使用できます。しかし、これはあなたのAndroidメモリを食べることに注意してください。 –

+0

Timに感謝します。私はビットマップに格納するというアプローチに向っていましたが、イメージのより小さなバージョンですが、今のところそれができます。よろしく。 –

答えて

3

ちょうど、外部/内部ストレージに保存し、それをアクセスするためのより良いです:


は、ここに私のMainActivity.javaです。これらのほとんどは

:それは、すべての画像がなどその遅延ロードをレンダリング処理するために、サードパーティのライブラリを使用しても良くにありますライブラリはHTTP URLからリソースを処理することに重点を置いていますが、引き続きローカルファイルまたはコンテンツプロバイダから情報をロードするために使用できます。

ビットマップを使用して画像を処理すると、this linkに示すように簡単にOutOfMemoryErrorが表示されることがあります。この場合、1つのビットマップしか使用していないので、心配する必要はありません。

+1

たとえば、 picassoを使用してファイルシステムからイメージをロードするhttp://stackoverflow.com/questions/23681177/picasso-load-image-from-filesystem – mubeen

1

ファイルシステムに保存してfilepathactivitiesに渡すことをお勧めします。

Android Bitmapsは、文字通り多くのメモリを消費します。実際に必要とされない限り、メモリに保持することは決してお勧めできません。

ファイルシステムに保存してファイル参照を渡すのはちょっと面倒ですが、後でアプリケーション内で多くの不要なoutOfMemoryエラーを防ぐことができます。

0

ピカソを使用してください。ファイルシステムにあなたのためにファイルを自動的にキャッシュします。

このファイルを長期間ディスクに保存する必要がある場合は、自分で保存する必要があります。

関連する問題