28

Drawable一部のリソースをファイルにエクスポートする必要があります。

たとえば、Drawableオブジェクトを返す関数があります。のファイルに書き出したい/sdcard/drawable/newfile.png。どうすればできますか?

4

2 に答える 2

40

ここでの最良の答えは素晴らしいアプローチですが。リンクのみです。手順を実行する方法は次のとおりです。

ドローアブルをビットマップに変換

どこから取得しているかに応じて、少なくとも 2 つの異なる方法でそれを行うことができますDrawable

  1. Drawable はres/drawableフォルダにあります。

Drawableドローアブル フォルダーにあるを使用したいとします。BitmapFactory#decodeResourceアプローチを使用できます。以下の例。

Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.your_drawable);
  1. オブジェクトがありPictureDrawableます。

PictureDrawable「実行時に」どこかから を取得している場合は、このBitmap#createBitmapアプローチを使用してBitmap. 以下の例のように。

public Bitmap drawableToBitmap(PictureDrawable pd) {
    Bitmap bm = Bitmap.createBitmap(pd.getIntrinsicWidth(), pd.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bm);
    canvas.drawPicture(pd.getPicture());
    return bm;
}

ビットマップをディスクに保存する

オブジェクトを取得したらBitmap、それを永続ストレージに保存できます。ファイル形式 (JPEG、PNG、または WEBP) を選択するだけです。

/**
 * @param dir you can get from many places like Environment.getExternalStorageDirectory() or mContext.getFilesDir() depending on where you want to save the image.
 * @param fileName The file name.
 * @param bm The Bitmap you want to save.
 * @param format Bitmap.CompressFormat can be PNG,JPEG or WEBP.
 * @param quality quality goes from 1 to 100. (Percentage).
 * @return true if the Bitmap was saved successfully, false otherwise.
 */
boolean saveBitmapToFile(File dir, String fileName, Bitmap bm, 
    Bitmap.CompressFormat format, int quality) {
    
    File imageFile = new File(dir,fileName);

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(imageFile);

        bm.compress(format,quality,fos);

        fos.close();

        return true;
    }
    catch (IOException e) {
        Log.e("app",e.getMessage());
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
    return false;
}

ターゲット ディレクトリを取得するには、次のようにします。

File dir = new File(Environment.getExternalStorageDirectory() + File.separator + "drawable");

boolean doSave = true;
if (!dir.exists()) {
    doSave = dir.mkdirs();
}

if (doSave) {
    saveBitmapToFile(dir,"theNameYouWant.png",bm,Bitmap.CompressFormat.PNG,100);
}
else {
    Log.e("app","Couldn't create target directory.");
}

Obs:大きな画像や多数の画像を扱う場合は、バックグラウンド スレッドでこの種の作業を行うことを忘れないでください。完了するまでに時間がかかり、UI がブロックされてアプリが応答しなくなる可能性があるためです。

于 2015-12-01T17:35:55.923 に答える
-10

SDカードに保存されている画像を取得します..

File imgFile = new  File(“/sdcard/Images/test_image.jpg”);
if(imgFile.exists()){

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
    myImage.setImageBitmap(myBitmap);

}

アップデート:

String path = Environment.getExternalStorageDirectory()+ "/Images/test.jpg"; 
File imgFile = new File(path);
于 2012-04-16T12:56:28.913 に答える