Android - 处理图像时最好是存储它还是在临时存储器中使用它?

时间:2016-04-04 00:46:29

标签: java android bitmap

我正在尝试构建一个使用相机拍照的应用程序,并将其发送回主活动以将其显示在ImageVew中。我看到了一个教程,可以在拍摄照片时将图像保存在SD卡中。我可以保存文件,但是我无法获取存储图像的位置。

我认为将图像存储在SD卡中的工作量太大,因为该图像并不重要。

有没有办法拯救"我刚用相机在BitMap元素中拍摄的图像?如果是这样比将它存储在SD卡中更有效?

这是我的MainActivity.java:

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

3 个答案:

答案 0 :(得分:3)

最好将其保存在外部/内部存储上,然后再访问它。 使用第三方库来处理所有图像渲染以及它们的延迟加载更好:

这些库中的大多数都将专注于处理来自HTTP URL的资源,但它们仍可用于从本地文件或内容提供商加载信息。

使用位图处理图片可能会轻松导致OutOfMemoryError,如this link所示。虽然在这种情况下,由于您只使用1个Bitmap,所以不用担心。

答案 1 :(得分:1)

将它保存在文件系统中并在filepath内传递activities几乎总是更好。

Android Bitmaps从字面上消耗了大量内存,除非确实需要,否则将内存保存在内存中并不是一个好主意。

我知道,将它存储在文件系统中并传递文件参考有点麻烦,但它会在您的应用中防止出现大量不必要的outOfMemory错误。

答案 2 :(得分:0)

使用毕加索。它会自动在文件系统上为您缓存文件。

如果您需要将该文件保留在磁盘上较长时间,则必须自行保存。