Это мой вариант использования:
ByteArray ba; // Some value is assigned here
Bitmap bitmap = BitmapFactory.decodeByteArray(ba, 0, ba.length);
Поскольку объект ByteArray
имеет большой размер, исключение OutOfMemoryError
выдается во второй строке при выполнении:
BitmapFactory.decodeByteArray(ba, 0, ba.length);
Уже пробовал:
ByteArray ba; // Some value is assigned here
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4; //or whatever value
Bitmap bitmap = BitmapFactory.decodeByteArray(ba, 0, ba.length, options);
Проблема с этим решением заключается в том, что при использовании атрибута inSampleSize
он исключает исключение OutOfMemoryError
, но растровое изображение размер (размеры: ширина х высота) уменьшен.
Вместо этого я ищу что-то похожее на это:
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream);
В этом примере качество растрового изображения уменьшается, НО его размер остается прежним.Когда я отображаю его в ImageView
:
iv.setImageBitmap(bitmap);
Он занимает то же место, что и оригинал, но с половиной качества.
Проблема в том, чтов моем случае я не могу использовать bitmap.compress
, потому что мое растровое изображение null .То есть метод compress
можно использовать после у вас есть действительный объект Bitmap
, что не соответствует моему случаю.
Вопрос:
Есть ли какое-либо решение, использующее BitmapFactory.Options
, которое может привести к тому же результату, что и bitmap.compress
: ниже quality
, то же самое dimensions
?