Сохранение растрового изображения на SD-карту без сжатия в Android

Я использую встроенную камеру Android, чтобы сделать снимок, а затем прикрепляю то же изображение к электронной почте, когда я тестирую эту функцию на устройстве 1.6, я могу назвать изображение, которое должно быть сделано встроенной камерой, но в 2.1 изображение имя, т. е. данное устройством,

Как дать пользовательское имя изображениям со встроенной камеры версии 2.1.

чтобы избежать этой проблемы, я сохраняю изображение вручную, но когда я пытаюсь вернуть изображение через намерение в виде растрового изображения, а затем сохраняю его на SD-карту, используя метод сжатия

этот метод обрабатывает результат встроенной камеры

protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
  File file = new File(Environment.getExternalStorageDirectory()
    + "/test.png");
  switch (requestCode)
  {
  case PHOTO_ACTION:
   if (resultCode == RESULT_CANCELED)
   {
     addPhoto = false;
     Toast.makeText(this, "Canceled ", Toast.LENGTH_LONG).show();
     break;
   } else if (resultCode == RESULT_OK)
   {
    Bundle b = data.getExtras();
    Bitmap bm = (Bitmap) b.get("data");

    FileOutputStream out;
    try
     {

     out = new FileOutputStream(file);
     bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
     out.flush();
     out.close();
     scanPhoto(file.toString());
     out = null;
     addPhoto = true;
     } catch (Exception e)
      {
       e.printStackTrace();
       addPhoto = false;
      }

но когда я храню так, я получаю два изображения. один с системным именем, а другой с именем, данным мной. но изображение, определенное пользователем, имеет меньшее разрешение, поэтому я спрашиваю, как сохранить растровое изображение с большим разрешением без его сжатия. Пожалуйста, помогите... мне


person Ramesh Bugatha    schedule 13.10.2010    source источник
comment
Я сталкиваюсь с той же проблемой, что и у вас. Вам удалось ее решить? Если да, не могли бы вы также поделиться своим решением со мной? Спасибо!   -  person Mellon    schedule 19.11.2010
comment
У меня такая же проблема, решения пока не нашел..   -  person viv    schedule 22.08.2014


Ответы (2)


Если вы просто хотите сохранить растровое изображение без потери качества, попробуйте использовать CompressFormat.PNG вместо JPEG, я видел людей, сталкивавшихся с этой проблемой раньше. Попробуйте изменить:

bm.compress(Bitmap.CompressFormat.JPEG, 100, out);

с:

bm.compress(Bitmap.CompressFormat.PNG, 100, out);

и видите, это помогает.

person Rick    schedule 04.03.2011
comment
Даже после установки 100% в JPEG были потери в четкости и качестве. Когда я сжимал с использованием PNG, он был такой же четкости. Спасибо :-) - person Sujay U N; 23.10.2017

Помимо ответа Рика выше, убедитесь, что вы предоставляете URI для намерения камеры, где она может сохранить полное изображение, иначе она вернет изображение большого пальца в параметре данных намерения. Итак, это будет так:

Intent photoPickerIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
imgFile = new File("Cache directory","img.png"); //== where you want full size image
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(imgFile));
startActivityForResult(photoPickerIntent, PickPhoto);

Это была ошибка, которую я делал.

person viv    schedule 22.08.2014