2016-10-14 5 views
0

У меня есть задача, в которой я хочу получить обратный путь изображения GIF, но я не получаю правильный путь. Я попытался под кодом установить путь.Как скопировать GIF-изображение в память устройства или получить правильный путь GIF в drawable

int resId = R.drawable.temp; 
String imagePath2 = "android.resource://"+getPackageName()+"/"+resId; 
String imagePath2 = ("android.resource://my.package.name/drawable/temp.gif"); 

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

String inputPath = Environment.getExternalStorageDirectory()+ "/temp.gif"; 

это работает.

Так что теперь я пытаюсь сохранить gif-изображения из доступных или активов с SD-карты или внутренней памяти. Я нашел ниже код для копирования PNG или JPEG на SD-карту.

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
File file = new File(extStorageDirectory, "ic_launcher.PNG"); 
outStream = new FileOutputStream(file); 
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
outStream.flush(); 
outStream.close(); 

, но не получилось каким-либо образом скопировать GIF-изображение. Любые предложения приветствуются.

ответ

0

Действительно, вы не получите путь от такого идентификатора ресурса. Вместо этого вы можете получить InputStream с такого ресурса и использовать этот поток для чтения содержимого и копирования, например, в реальный файл или что-то еще.

InputStream is = getResources().openRawResource(R.drawable.temp); 

Тип файла не имеет значения. И как только у вас будет этот рабочий файл «copy file», вы можете выбросить код для копирования jpg и png, поскольку он использует промежуточную растровую карту, которая является плохой идеей и изменит содержимое файла, и вы получите другой файл -размер -.

+0

спасибо за тонну для вас Ответ @greenapps – Nitish

0

Я сделал ниже метод для получения пути изображения, и он работает идеально.

int resId = R.drawable.temp; 
public String getFilePath(int resId){ 
    // AssetManager assetManager = getAssets(); 
    String fileName = "emp.gif"; 
    InputStream in = null; 
    OutputStream out = null; 
    File outFile = null; 
    try { 
     //in = assetManager.open(fileName); 
     in = getResources().openRawResource(resId); 
     outFile = new File(getExternalFilesDir(null), fileName); 
     out = new FileOutputStream(outFile); 
     copyFile(in, out); 
    } catch(IOException e) { 
     Log.e("tag", "Failed to copy asset file: " + fileName, e); 
    } 
    finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException e) { 
       // NOOP 
      } 
     } 
     if (out != null) { 
      try { 
       out.close(); 
      } catch (IOException e) { 
       // NOOP 
      } 
     } 
    } 

    return outFile.getAbsolutePath(); 
} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
}