Как записать изображение (должно быть точного размера) на внешнее хранилище - PullRequest
0 голосов
/ 24 сентября 2019

Я пишу программу, которая считывает изображение из ресурса / отрисовки и сбрасывает его во внешнее хранилище.Моя проблема в том, что разные устройства потребляют разную память для одного и того же изображения, но мне нужно, чтобы потребление памяти было постоянным.Например, устройство 1 показывает размер изображения, равный 3 МБ, тогда как устройство 2 показывает размер изображения, равный 4 МБ.Ниже приведен пример кода, который у меня есть.TIA

BitmapFactory.Options options = new BitmapFactory.Options();
//setting few options
//making sure that the getByteCount will always return the same value irrespective of the device
bm = BitmapFactory.decodeResource(res, R.drawable.image, options); 
bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream); //where outstream is where I need to store my image in the device filesystem

1 Ответ

0 голосов
/ 25 сентября 2019

Я могу предположить, что ваши устройства имеют разные размеры экрана и плотность.Поэтому используются разные ресурсы.

Чтобы получить изображение для экрана определенного размера, вы можете использовать следующий код:

Drawable drawable = resources.getDrawableForDensity(id, DisplayMetrics.DENSITY_XHIGH, theme);

Кроме того, вы можете попытаться уменьшить размер изображения:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inSampleSize = 3; 
BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage, options);

Но, как правило, вы не всегда можете быть уверены, что изображение будет занимать одинаковое количество памяти, это зависит от различных факторов.

Надеюсь, это поможет.

...