So (или SO), мои требования:камеры Намерение Фото Загрузить
- Дисплей 4 фото заполнители
- Нажмите один заполнитель, чтобы сделать снимок
- Дисплей 4 миниатюры отснятых изображений в фрагмент
- Загрузить 4 фото (один уникальный запрос HTTP, максимальный размер на фото 250KB, всего 1 Мб)
первоначально я думал, что это был стенд ard/довольно простая задача, но я, наконец, изменил мой разум. Я иду так:
Когда пользователь нажимает на заполнителе:
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; }
От 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); }
сервера стороне моего 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 КБ (или некоторых конкретных размеров пикселей) и , а затем перезаписывать сохраненные файлы? Можете ли вы предложить что-то, чтобы указать мне в правильном направлении?
Важно: если возможно, я бы хотел, чтобы избежать перезаписи приложения для камеры, я просто намерен, у меня мало времени.
Я бы предпочел избежать этой опции из-за ограниченной совместимости и поддержки. Вместо этого я хочу уменьшить использование памяти, обрабатывая меньшие фотографии. В любом случае спасибо за ваше предложение. – Jumpa