以编程方式将Android包图标设置为PNG或BMP

时间:2014-07-18 16:13:20

标签: android bitmap icons packages

我试图通过迭代每个包并执行以下操作,将设备上的所有包的图标保存为BMP或PNG文件。

Drawable icon = getPackageManager().getApplicationIcon(packageInfo);
Bitmap bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Config.ARGB_8888);

try {
     out = new FileOutputStream("/storage/sdcard0/images/" + packageInfo.packageName +".png");
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
} catch (Exception e) {
     e.printStackTrace();
} finally {
    try{
     out.close();
    } catch(Throwable ignore) {}
}

这是创建空白图像,我如何更改代码以创建图像格式的实际图标?

enter image description here

2 个答案:

答案 0 :(得分:2)

我的问题是,如果有人遇到同样的问题,我引用了这个answer.

我忘了查看图标是否已经是BitmapDrawable的实例。因为我可以将它转换为bitmapdrawable并使用.getBitmap

if (icon instanceof BitmapDrawable) {
    bitmap = ((BitmapDrawable)icon).getBitmap();
}else{
    bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(), Config.ARGB_8888);
}

答案 1 :(得分:2)

以下是可以涵盖所有案例的代码。

public static Bitmap drawableToBitmap (Drawable drawable) {


    if (drawable instanceof BitmapDrawable) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
        if (bitmapDrawable.getBitmap() != null) {
            return bitmapDrawable.getBitmap();
        }
    }

    if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
        return Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
    } else {
        return Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
    }

}