我一直在努力按照这个答案 https:/stackoverflow.coma85277451352702。为了解决一些内存问题,我用了一个代码来创建一个缩放的位图,而不是只在画布上画一个位图。
下面是我的代码。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.inInputShareable = true;
options.inSampleSize = 8;
Bitmap s000 = BitmapFactory.decodeResource(getResources(), getResources().getIdentifier("zoo" + i, "drawable", getPackageName()));
int X = c.getWidth()/2 - s000.getWidth()/2 ;
int Y = c.getHeight()/2 - s000.getHeight()/2 ;
Bitmap.createScaledBitmap(s000, s000.getWidth(), s000.getHeight(), true);
但它只是创建了一个空白的屏幕.另外如何在createScaledBitmap方法中传递图像的位置参数(分别是X和Y)?
郑重声明,当我试图调整某些高分辨率灰度PNGs的大小时,我也遇到了同样的问题:它们被正确地加载了 BitmapFactory.decodeResource
那么 Bitmap.createScaledBitmap
把它们变成了黑色的图片。
原来,在API 26+上,Android不知道如何处理位图的 ColorSpace
没有被正确检测到("未知"),并扰乱了大小调整。
我的应用程序的工作解决方案是在加载时定义一个首选的ColorSpace 。
BitmapFactory.Options options = new BitmapFactory.Options();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
options.inPreferredColorSpace = ColorSpace.get(ColorSpace.Named.SRGB);
bitmap = BitmapFactory.decodeXXX(<whatever method you fancy>, options);