Android-Bitmap.createScaledBitmap()将配置设置为ARGB_8888

Android-Bitmap.createScaledBitmap()将配置设置为ARGB_8888,android,bitmap,config,scaling,Android,Bitmap,Config,Scaling,这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有被问到 我对Bitmap.createScaledBitmap()有一个问题,由此产生的缩放位图总是ARGB_8888,而不管输入的配置如何。当然,在使用有限的内存时,这是一个问题 InputStream is; try { is = mAssets.open("test.png"); BitmapFactory.Options opts = new Bitma

这是我第一次遇到一个问题,尽管进行了彻底的搜索,但似乎还没有被问到

我对
Bitmap.createScaledBitmap()
有一个问题,由此产生的缩放位图总是
ARGB_8888
,而不管输入的配置如何。当然,在使用有限的内存时,这是一个问题

        InputStream is;
    try {
        is = mAssets.open("test.png");
        BitmapFactory.Options opts = new BitmapFactory.Options();
        opts.inPreferredConfig = Config.ARGB_4444;
        Bitmap originalBitmap = BitmapFactory.decodeStream(is, null, opts);
        System.out.println("Original Config: " + originalBitmap.getConfig());
        mScale = (float) mHeight / originalBitmap.getHeight();
        mBitmapScaled = Bitmap.createScaledBitmap(originalBitmap, (int)(mScale*(float)originalBitmap.getWidth()),
                (int)(mScale*(float)originalBitmap.getHeight()), true);
        System.out.println("Scaled: " + mBitmapScaled.getConfig());
        originalBitmap.recycle();
        is.close();
    } catch (IOException e) {
        // Do something.
    }
上述代码返回输出:

原始位图:ARGB_4444

比例:ARGB_8888

由于
Bitmap.createScaledBitmap()。有什么想法吗?

createScaledBitmap(…)
创建一个新的缩放位图,并因此将提供的参数传递给
createBitmap(…)
方法 以下是来自
createBitmap(…)
的源代码的示例:

如您所见,每个带有
ARGB_4444
配置的位图都会转换为
ARGB_8888
位图。因此,要回答您的问题:不,没有办法防止这种情况发生(除非您希望复制Bitmap.java源代码的一部分并创建自己的缩放方法)

为什么带有
ARGB_4444
配置的位图会转换为
ARGB_8888

州政府喜欢这样:

ARGB_4444
: 此字段已弃用。因为这个质量很差 配置时,建议改用
ARGB_8888


如果原始位图包含alpha,将返回ARGB_8888。否则为RGB_565。如果您不想使用ARGB_8888,请不要使用
createScaledBitmap
,例如,使用
Canvas
谢谢Ahmad,非常有用。我会投赞成票,但我还没有必要的声誉。当我有空的时候,我一定会回来的。
    if (config != null) {
        switch (config) {
            case RGB_565:
                newConfig = Config.RGB_565;
                break;
            case ALPHA_8:
                newConfig = Config.ALPHA_8;
                break;
            //noinspection deprecation
            case ARGB_4444:
            case ARGB_8888:
            default:
                newConfig = Config.ARGB_8888;
                break;
        }
    }