2013-09-26 2 views
-2

Я пытаюсь сохранить изображение с точки зрения изображения, но я получаю исключение (Read-only file system)Не сохранение изображения из ImageView

Я попробовал этот код,

bitmap1 = imageView.getDrawingCache(); //for retrieving the Image 

public void saveOnClick(View view) 
{ 
    try 
    { 
      String filename="qrimage"; 
      FileOutputStream out = new FileOutputStream(filename); 
      bitmap1.compress(Bitmap.CompressFormat.PNG, 90, out); 
      Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show(); 

    } 
    catch (Exception e) 
    { 
      e.printStackTrace(); 
      Toast.makeText(getApplicationContext(), e.getMessage()+" Not Saved!", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

Вы добавили это разрешение для манифеста файла ? –

+0

@BirajZalavadia yeah – Shiv

ответ

0

здесь является функцией экономии

void Save() { 
    final File myDir = new File(folder); 
    myDir.mkdirs(); 
    final Random generator = new Random(); 
    int n = 10000; 
    n = generator.nextInt(n); 
    final String fname = "StyleMe-" + n + ".png"; 
    file = new File(myDir, fname); 
    if (file.exists()) 
     file.delete(); 
    try { 

     mCBitmap.compress(CompressFormat.JPEG, 100, out); 

     out.flush(); 
     out.close(); 
     sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
       Uri.parse("file://" 
         + Environment.getExternalStorageDirectory()))); 
     Toast.makeText(getApplication(), "Image Saved", Toast.LENGTH_SHORT) 
       .show(); 

    } catch (final Exception e) { 

    } 
} 

просто позвоните Save(); в onНажмите кнопку. P.S вам нужно будет изменить имя и имя растрового изображения.

--- Объявите это как глобальное

static File file; 
String folder = "/sdcard/Pictures/YourFolderName"; 

и не забудьте установить разрешение на чтение и запись в хранилище.

+0

Позвольте мне попробовать этот код – Shiv

+0

@Shiv проверить измененный ответ. – k0sh

+0

Я получаю исключение «Null» – Shiv

1

разрешение пользователя

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+0

Уже добавлено разрешение на использование – Shiv

0

Попробуйте этот путь

public void saveOnClick(View view) 
    { 
     try 
     { 

       imageView.setDrawingCacheEnabled(true); //UPDATE HERE 
       imageView.buildDrawingCache(); //UPDATE HERE 
       bitmap1 = imageView.getDrawingCache(); //UPDATE HERE 

       String filename="qrimage"; 
       FileOutputStream out = new FileOutputStream(filename); 
       bitmap1.compress(Bitmap.CompressFormat.PNG, 90, out); 
       Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show(); 

     } 
     catch (Exception e) 
     { 
       e.printStackTrace(); 
       Toast.makeText(getApplicationContext(), e.getMessage()+" Not Saved!", Toast.LENGTH_SHORT).show(); 
     } 
    } 
-1

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

Перейти к Настройки устройства> Устройство> Приложения> Диспетчер приложений > «ваше приложение»> «Разрешения»> «Разрешить разрешение на хранение»!

Право доступ к манифесту:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Итак, если вы хотите создать свой собственный каталог в хранилище файлов вы можете использовать somethibng как:

String myDate = getCurrentDateAndTime(); 
FileOutputStream outStream = null; 
File sdCard = Environment.getExternalStorageDirectory(); 
File dir = new File(sdCard.getAbsolutePath() + "/YourFolderName"); 
dir.mkdirs(); 
String fileName = "YourFileName_"+myDate+".jpg"; 
File outFile = new File(dir, fileName); 
outStream = new FileOutputStream(outFile); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
outStream.flush(); 
outStream.close(); 
//to refresh the gallery 
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
intent.setData(Uri.fromFile(file)); 
sendBroadcast(intent); 
} 

Надеется, что это помогает!

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