我一直在尝试按照这个回答https://stackoverflow.com/a/8527745/1352702 ,创建一个缩放的位图,而不是仅仅在画布上绘制位图,以解决一些内存问题。
这是我的代码,
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)?
答案 0 :(得分:0)
出于记录,在尝试调整某些高分辨率灰度PNG的大小时,我遇到了同样的问题: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);