фон
Предположим, у меня есть inputStream, который был создан из Интернета определенного файла изображения.
Я хочу получить информацию о файле изображения и только потом его декодировать.
он полезен для нескольких целей, таких как понижающая дискретизация, а также предварительный просмотр информации до отображения изображения.
проблема
Я попытался помечать & reset inputStream, обернув inputStream с помощью BufferedInputStream, но это не сработало:
inputStream=new BufferedInputStream(inputStream);
inputStream.mark(Integer.MAX_VALUE);
final BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
BitmapFactory.decodeStream(inputStream,null,options);
//this works fine. i get the options filled just right.
inputStream.reset();
final Bitmap bitmap=BitmapFactory.decodeStream(inputStream,null,options);
//this returns null
для получения входного потока из URL-адреса, я использую:
public static InputStream getInputStreamFromInternet(final String urlString)
{
try
{
final URL url=new URL(urlString);
final HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();
final InputStream in=urlConnection.getInputStream();
return in;
}
catch(final Exception e)
{
e.printStackTrace();
}
return null;
}
вопрос
как я могу заставить обработчик кода маркировать сброс?
он отлично работает с ресурсами (на самом деле мне даже не нужно создавать новый BufferedInputStream для этого, чтобы он работал), но не с inputStream из Интернета...
EDIT:
Кажется, мой код в порядке, вроде...
на некоторых сайтах (например этот и этот), он не может декодировать файл изображения даже после перезапуска.
если вы декодируете растровое изображение (и используете inSampleSize), он может декодировать его в порядке (занимает много времени).
теперь возникает вопрос, почему это происходит, и как я могу его исправить.