如何将可绘制资源中的图像保存到 SD 卡?

Posted

技术标签:

【中文标题】如何将可绘制资源中的图像保存到 SD 卡?【英文标题】:How to save image from drawable resource to sd card? 【发布时间】:2013-07-14 21:09:57 【问题描述】:

所以,我有如下图所示的视图。另外,我将添加一个保存按钮。您还可以查看我的 XML 文件。我正在使用此代码通过按下一个和上一个按钮从可绘制文件夹加载图像:

public void onClick(View v) 
        switch (v.getId())

        case R.id.bNext:
            a++;
            setImage(a);
            break;
        case R.id.bPrevious:
            if(a>0)
            
                a--;
                setImage(a);  
                break;
            
        
    
    private void setImage(int a)
        if (a == 0)
        
        slika.setImageResource(R.drawable.l2);
        a = 1;
        
        else if (a == 1)
        
        slika.setImageResource(R.drawable.l3);
        a = 2;
        
        else if (a == 2)
        
        slika.setImageResource(R.drawable.l4);
        a = 3;
        
        else if (a == 3)
        
        slika.setImageResource(R.drawable.l5);
        a = 4;
        
        else if (a == 4)
        
        slika.setImageResource(R.drawable.l6);
        a = 5;
        
.
.
.
.
.
        else if (a == 55)
        
        slika.setImageResource(R.drawable.l57);
        a = 56;
        
        

我需要保存当前屏幕上的图像。我在 *** 上找到了一些答案,但这些都是针对具有已知名称的特定图像的。我不知道用户想要保存什么图像。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:gravity="center">

                <ImageView
            android:id="@+id/imageView1"
            android:layout_
            android:layout_
            android:layout_centerHorizontal="true"/>

        <Button
            android:id="@+id/bMenu"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="120dp"
            android:background="@drawable/buttons"
            android:gravity="center"
            android:padding="0dp"
            android:text="Menu"
            android:textColor="#ffffff"
            android:textSize="23dp" />

        <Button
            android:id="@+id/bNext"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="220dp"
            android:background="@drawable/buttons"
            android:padding="0dp"
            android:text="Next"
            android:textSize="23dp"
            android:textColor="#ffffff" />

        <Button
            android:id="@+id/bPrevious"
            android:layout_
            android:layout_
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:background="@drawable/buttons"
            android:gravity="center"
            android:padding="0dp"
            android:text="Previous"
            android:textColor="#ffffff"
            android:textSize="23dp" />

    </RelativeLayout>

【问题讨论】:

【参考方案1】:
String folder = "/sdcard/Pictures/MyAppFolder";

void save()  
    Imageview  view = (ImageView)findViewById(R.id.cachesView);
    view.buildDrawingCache(); 
    Bitmap yourBitmap = view.getDrawingCache();  
    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 file = new File(myDir, fname);
    if (file.exists()) 
        FileOutputStream out = new FileOutputStream(file);
        yourBitmap.compress(CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        sendBroadcast(
            new Intent(Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://"+ Environment.getExternalStorageDirectory()))
        ); // this will refresh the gallery app.
        Toast.makeText(getApplication(), "Image Saved", Toast.LENGTH_SHORT).show();
    

请看

在你的类中添加这个方法并点击按钮放置

save();

【讨论】:

是的,但是如何知道当前屏幕上的“yourBitmap”是什么? 我遇到了一些错误。 “最终文件 myDir = 新文件(文件夹);”文件夹上。你能告诉我应该把你的 sn-p 的哪一部分放在我的按钮的 onclicklistener 中,以及作为班级成员什么? String folder = "/sdcard/Pictures/Name of your CHOICE"; 代码不工作时是否会报错?你应该在你的按钮onClick() 方法中调用这个save() 方法。

以上是关于如何将可绘制资源中的图像保存到 SD 卡?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 将图像从 URL 保存到 SD 卡

从android寻呼机将图像保存到sd卡

在画布上绘制背景图像并保存图像

将位图从 arraylist 保存到 SD 卡 - 保存的文件不可读

如何将图像正确保存到 SD 卡?

使用 Fresco 时如何将图像保存到 SD 卡?