Сохранение растрового изображения на SD-карту без сжатия в Android - PullRequest
6 голосов
/ 13 октября 2010

Я использую встроенную камеру 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;
      }

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

Ответы [ 2 ]

6 голосов
/ 04 марта 2011

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

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

с помощью:

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

и посмотрите, как это помогает.

3 голосов
/ 22 августа 2014

Помимо ответа Рика выше, убедитесь, что вы предоставляете 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);

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

...