资产中的图像未被看到

时间:2014-12-12 03:19:20

标签: java android image drawable

如何在Android中获取res drawable或资产中的所有图像并放入外部存储?请帮我。这是我目录中的代码:

1 个答案:

答案 0 :(得分:1)

R.drawable中保存全部图像不是最佳选择。保存特定图像而不是全部图像会更好。但是,您可以按照R.drawable中的说明保存所有图片:

public static void saveAllDrawablesToSdcard(final Context context, final File directory) throws Exception {
    new Thread() {

        @Override
        public void run() {
            try {
                directory.mkdirs();
                final Field[] fields = R.drawable.class.getFields();
                final Resources res = context.getResources();
                for (Field field : fields) {
                    final int id = (Integer) field.get(null);
                    final Drawable drawable = res.getDrawable(id);
                    final Bitmap bitmap = drawableToBitmap(drawable);
                    final File file = new File(directory, field.getName() + ".png");
                    saveBitmapAsPng(bitmap, file.getAbsolutePath());
                }
            } catch (Exception e) {
            }
        }
    }.start();
}

/**
 * Converts a {@link Drawable} to a {@link Bitmap}
 *
 * @param drawable
 *            The {@link Drawable} to convert
 * @return The converted {@link Bitmap} or {@code null} if it was unable to be converted.
 */
public static Bitmap drawableToBitmap(final Drawable drawable) {
    if (drawable instanceof BitmapDrawable) {
        return ((BitmapDrawable) drawable).getBitmap();
    }
    final int height = drawable.getIntrinsicHeight();
    final int width = drawable.getIntrinsicWidth();
    if (width <= 0 || height <= 0) {
        return null;
    }
    final Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    final Canvas canvas = new Canvas(bitmap);
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
    drawable.draw(canvas);
    return bitmap;
}

/**
 * Saves a {@link Bitmap} as a PNG file.
 *
 * @param bmp
 *            a {@link Bitmap}
 * @param path
 *            the path to save the bitmap to
 * @return {@code true} if successfully created.
 */
public static final boolean saveBitmapAsPng(final Bitmap bitmap, final String path) {
    try {
        final File file = new File(path);
        final File parent = file.getParentFile();
        if (parent != null && !parent.exists()) {
            parent.mkdirs();
        }
        final FileOutputStream fos = new FileOutputStream(file, false);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100 /* ignored for PNG */, fos);
        fos.flush();
        fos.close();
    } catch (final Exception e) {
        return false;
    }
    return true;
}