23

ボタンをクリックしてユーザーのSDカードに画像を保存する方法を知りたいです。誰かがそれを行う方法を教えてくれませんか。画像は .png 形式で、drawable ディレクトリに保存されます。その画像をユーザーのSDカードに保存するボタンをプログラムしたいと思います。

4

3 に答える 3

43

ファイル(あなたの場合は画像)を保存するプロセスはここで説明されています:save-file-to-sd-card


drawble リソースから sdcard に画像を保存しています:

ドローアブルに ic_launcher という画像があるとします。次に、この画像から次のようなビットマップ オブジェクトを取得します。

Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);

SD カードへのパスは、次を使用して取得できます。

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

次に、ボタンをクリックして次を使用してSDカードに保存します。

File file = new File(extStorageDirectory, "ic_launcher.PNG");
    FileOutputStream outStream = new FileOutputStream(file);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();

android.permission.WRITE_EXTERNAL_STORAGE許可を追加することを忘れないでください。

ドローアブルから保存するために変更されたファイルは次のとおりです: SaveToSd 、完全なサンプル プロジェクト: SaveImage

于 2012-05-12T06:17:01.840 に答える
3

その質問には本当の解決策はないと思います。それを行う唯一の方法は、次のように sd_card キャッシュディレクトリからコピーして起動することです。

Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId);
File f = new File(getExternalCacheDir()+"/image.png");
try {
    FileOutputStream outStream = new FileOutputStream(f);
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
    outStream.flush();
    outStream.close();
} catch (Exception e) { throw new RuntimeException(e); }

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(f), "image/png");
startActivity(intent);


// NOT WORKING SOLUTION
// Uri path = Uri.parse("android.resource://" + getPackageName() + "/" + resourceId);
// Intent intent = new Intent();
// intent.setAction(android.content.Intent.ACTION_VIEW);
// intent.setDataAndType(path, "image/png");
// startActivity(intent);
于 2014-03-18T18:43:18.157 に答える
0

Kotlinを使用する場合は、次のようにできます。

val mDrawable: Drawable? = baseContext.getDrawable(id)
val mbitmap = (mDrawable as BitmapDrawable).bitmap
val mfile = File(externalCacheDir, "myimage.PNG")
        try {
            val outStream = FileOutputStream(mfile)
            mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)
            outStream.flush()
            outStream.close()
        } catch (e: Exception) {
            throw RuntimeException(e)
        }
于 2021-11-21T13:42:05.197 に答える