【问题标题】:Android - While handling an image is it better to store it or use it in temporary memory?Android - 在处理图像时,将其存储还是在临时内存中使用更好?
【发布时间】:2016-04-04 00:46:29
【问题描述】:

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

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

有没有办法将我刚刚用相机拍摄的图像“保存”在位图元素中?如果是这样,它是否比将其存储在 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()));
    }
}}

【问题讨论】:

  • 您可以使用内存解决方案,例如将位图存储在单例中。但请记住,这会占用您的 Android 内存。
  • 谢谢蒂姆。我采用了将其存储在位图中的方法,但它是图像的较小版本,现在可以了。问候。

标签: java android bitmap


【解决方案1】:

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

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

使用位图处理图像可能很容易导致OutOfMemoryError,如this link 所示。不过,在这种情况下,由于您只使用 1 个位图,因此不必担心太多。

【讨论】:

【解决方案2】:

最好将其保存在文件系统中并在activities 中传递filepath

Android Bitmaps 实际上会消耗大量内存,除非确实需要,否则将其保存在内存中绝不是一个好主意。

我知道,将它存储在文件系统中并传递文件引用有点麻烦,但它可以防止以后在您的应用中出现许多不需要的outOfMemory 错误。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2012-07-18
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多