相机意图照片上传

时间:2015-02-09 10:26:44

标签: android out-of-memory android-camera-intent android-bitmap loopj

所以(或者说),我的要求是:

  1. 显示4张照片占位符
  2. 点击一个占位符拍摄照片
  3. 以片段
  4. 显示拍摄照片的4个缩略图
  5. 上传4张照片(一张唯一的HTTP请求,每张照片最大尺寸250kb,总计1 MB)
  6. 我最初认为这是一项标准/非常简单的任务,但我终于改变了 我脑海。我正在这样做:

    1. 当用户点击占位符时:

      file = createImageFile();
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
      startActivityForResult(takePictureIntent);
      
      private File createImageFile() throws IOException {
      
          // fileName is just a unique string...
      
          File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
      
          File file = File.createTempFile(fileName, ".jpg", storageDir);
      
          return file;
      }
      
    2. 来自Google Docs 我为占位符设置了缩略图:

      private void setThumbnail(File file, ImageView target) {
          int targetWidth = target.getWidth();
          int targetHeight = target.getHeight();
      
          BitmapFactory.Options options = new BitmapFactory.Options();
          options.inJustDecodeBounds = true;
          BitmapFactory.decodeFile(file.getAbsolutePath(), options);
          int thumbWidth = options.outWidth;
          int thumbHeight = options.outHeight;
      
          int scaleFactor = Math.min(thumbWidth / targetWidth, thumbHeight
                  / targetHeight);
      
          options.inJustDecodeBounds = false;
          options.inSampleSize = scaleFactor;
          options.inPurgeable = true;
      
          Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(),
              options);
      
          target.setImageBitmap(bitmap);
      }
      
    3. 服务器端我的PHP API需要4个JPEG文件,每个文件最大250kb。 我正在使用Loopj库(1.4.6)上传它们。 Loopj设置请求参数whit方法放,我们可以使用三个 上传文件的方法:

      params.put("picture", file); // Upload a File
      params.put("picture", inputStream); // Upload an InputStream
      params.put("picture", new ByteArrayInputStream(bytes)); // Upload some bytes
      
    4. 从相机意图中保存的图片对于应用程序保留的内存来说太大了 我不能只将它们“加载”到RAM中(或者我会得到一个OOM异常)。

      我应该将它们缩小(或压缩不知道)迭代到250kb(或某些特定的像素大小)和 然后覆盖保存的文件?能否请你指出一些指向正确方向的东西?

      重要提示:如果可能我想避免重写相机应用程序,我只是意图,我没有足够的时间。

1 个答案:

答案 0 :(得分:0)

您是否尝试在manifest.xml中添加代码:

<application 
       android:largeHeap="true">

这使您可以通过为应用分配更多内存来管理大量照片。