我有一个任务,我想获得可绘制的GIF图像路径,但我没有得到正确的路径,我尝试在代码下设置路径。
String inputPath = Environment.getExternalStorageDirectory()+ "/temp.gif";
但它没有工作它不给我正确的图像,但当我试图从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();
它正在发挥作用。
所以现在我试图从SD卡或内存中存储来自drawable或资产的gif图像。我发现下面的代码将PNG或JPEG复制到SD卡。
{{1}}
但没有办法复制GIF图像。 欢迎任何建议。
答案 0 :(得分:0)
确实,你不会从这样的资源ID获得路径。相反,您可以从这样的资源中获取InputStream
并使用该流来读取内容并复制到例如真实文件或其他任何内容。
InputStream is = getResources().openRawResource(R.drawable.temp);
文件的类型无关紧要。只要你有这个复制文件'工作你可以丢弃复制jpg和png的代码,因为它使用中间的Bitmap,这是一个坏主意,将改变文件内容,你最终得到一个不同的文件-size - 。
答案 1 :(得分: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);
}
}