天天看點

Android實作将Drawable資源ID存儲到Sdcard上

過程分為三步:

1. 将資源ID轉化為Drawable

2. 将Drawable轉化為Bitmap

3. 将Bitmap存儲到Sdcard上

代碼如下:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        saveDrawableById(R.drawable.p4, "p4.jpg", Bitmap.CompressFormat.JPEG);
    }

    /**
     * 存儲資源為ID的圖檔
     * @param id
     * @param name
     */
    public void saveDrawableById(int id, String name, Bitmap.CompressFormat format) {
        Drawable drawable = idToDrawable(id);
        Bitmap bitmap = drawableToBitmap(drawable);
        saveBitmap(bitmap, name, format);
    }

    /**
     * 将資源ID轉化為Drawable
     * @param id
     * @return
     */
    public Drawable idToDrawable(int id) {
        return this.getResources().getDrawable(R.drawable.p4);
    }

    /**
     * 将Drawable轉化為Bitmap
     * @param drawable
     * @return
     */
    public Bitmap drawableToBitmap(Drawable drawable) {
        if(drawable == null)
            return null;
        return ((BitmapDrawable)drawable).getBitmap();
    }

    /**
     * 将Bitmap以指定格式儲存到指定路徑
     * @param bitmap
     * @param path
     */
    public void saveBitmap(Bitmap bitmap, String name, Bitmap.CompressFormat format) {
        // 建立一個位于SD卡上的檔案
        File file = new File(Environment.getExternalStorageDirectory(),
                name);
        FileOutputStream out = null;
        try{
            // 打開指定檔案輸出流
            out = new FileOutputStream(file);
            // 将位圖輸出到指定檔案
            bitmap.compress(format, ,
                    out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}