Мне нужно создать растровое изображение из изображений SDCard, поэтому после получения URI изображения я получаю байтовые данные, открывая inputStream следующим образом
public byte[] getBytesFromFile(InputStream is)
{
byte[] data = null;
ByteArrayOutputStream buffer=null;
try
{
buffer = new ByteArrayOutputStream();
int nRead;
data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1)
{
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
} catch (IOException e)
{
return null;
}
finally
{
if(data!=null)
data = null;
if(is!=null)
try {
is.close();
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if(buffer!=null)
{
try {
buffer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
buffer = null;
}
System.gc();
}
после этого я просто создаю растровое изображение этих данных, следуя коду
byte[] data = getBytesFromFile(is);
Bitmap bm= BitmapFactory.decodeByteArray(data, 0, data.length);
но это выдает мне ошибку из памяти. многие люди направляют меня на проверку утечек памяти, но это первый шаг в моем приложении. Я имею в виду фильтр намерений. Я запускаю свое приложение из меню галереи «поделиться», которое вызывает мое приложение с изображением.
Пожалуйста, помогите мне, ребята, если я ошибаюсь ... а также это исключение распространяется на устройства, которые имеют изображения с высоким разрешением (размер не превышает 1 МБ), но все равно, как это должно создавать растровые изображения ...