1

So (или SO), мои требования:камеры Намерение Фото Загрузить

  1. Дисплей 4 фото заполнители
  2. Нажмите один заполнитель, чтобы сделать снимок
  3. Дисплей 4 миниатюры отснятых изображений в фрагмент
  4. Загрузить 4 фото (один уникальный запрос HTTP, максимальный размер на фото 250KB, всего 1 Мб)

первоначально я думал, что это был стенд ard/довольно простая задача, но я, наконец, изменил мой разум. Я иду так:

  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 установленных параметры запроса йота метод PUT, и мы можем использовать три пути для загрузки файла:

    params.put("picture", file); // Upload a File 
    params.put("picture", inputStream); // Upload an InputStream 
    params.put("picture", new ByteArrayInputStream(bytes)); // Upload some bytes 
    

Изображение, сохраненное с намерения камеры является слишком большим для памяти, зарезервированной для приложений и I не могут просто «загрузить» их в ОЗУ (или я получу исключение OOM).

Должен ли я масштабировать их (или сжимать не знаю) итеративно до 250 КБ (или некоторых конкретных размеров пикселей) и , а затем перезаписывать сохраненные файлы? Можете ли вы предложить что-то, чтобы указать мне в правильном направлении?

Важно: если возможно, я бы хотел, чтобы избежать перезаписи приложения для камеры, я просто намерен, у меня мало времени.

ответ

0

ли вы пытаетесь добавить в вашем Manifest.xml этого кода:

<application 
     android:largeHeap="true"> 

Это позволяет правильно управлять огромной фотографией, выделяя больше памяти для вашего приложения.

+0

Я бы предпочел избежать этой опции из-за ограниченной совместимости и поддержки. Вместо этого я хочу уменьшить использование памяти, обрабатывая меньшие фотографии. В любом случае спасибо за ваше предложение. – Jumpa

Смежные вопросы