Мне нужно получить высоту и ширину изображения, найденного во входном потоке. Вот что я сделал:Получение размера изображения inputstream
private Boolean testSize(InputStream inputStream){
BitmapFactory.Options Bitmp_Options = new BitmapFactory.Options();
Bitmp_Options.inJustDecodeBounds = true;
BitmapFactory.decodeResourceStream(getResources(), new TypedValue(), inputStream, new Rect(), Bitmp_Options);
int currentImageHeight = Bitmp_Options.outHeight;
int currentImageWidth = Bitmp_Options.outWidth;
Bitmp_Options.inJustDecodeBounds = false;
if(currentImageHeight < 200 || currentImageWidth < 200){
Object obj = map.remove(pageCounter);
Log.i("Page recycled", obj.toString());
return true;
}
return false;}
Переход к задаче в точке:
Это изменить BitmapFactory.Options даже если я заставил его быть ложным после расчета на моем втором методе ниже.
private Bitmap getBitmap(InputStream InpStream){
Bitmap originalBitmap = BitmapFactory.decodeStream(InpStream);//Null.
return originalBitmap;
}
Теперь, к моему вопросу, есть другой способ получения размера и ширины изображения из входного потока? Мне очень нужна помощь в этом, любая помощь очень ценится.
ZipInputStream zip = null;
zip = new ZipInputStream(new FileInputStream(getFileLocation()));
for(ZipEntry zip_e = zip.getNextEntry(); zip_e != null ; zip_e = zip.getNextEntry()){
if(zip_e.isDirectory()) {
continue;
}
String file_zip = zip_e.getName();
String comparison = map.get(pageCounter).getHref();
if(file_zip.endsWith(comparison)){
SpannableString Spanable_String = new SpannableString("abc");
if(testSize(zip)){
map.remove(pageCounter);
return false;
}
Bitmap bitmap = getBitmap(zip);
if(bitmap == null){
map.remove(pageCounter);
return false;
}
image_page.put(zip_e.getName(), zip);
Drawable drawable_image = new FastBitmapDrawable(bitmap);
drawable_image.setBounds(0,0,drawable_image.getIntrinsicWidth(), drawable_image.getIntrinsicHeight());
ImageSpan imageSpan = new ImageSpan(drawable_image, ImageSpan.ALIGN_BASELINE);
Spanable_String.setSpan(imageSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(Spanable_String);
return false;
}
}
Вы хотите сказать, что параметр Bitmp_Options.inJustDecodeBounds для true сохраняется для последующих вызовов 'BitmapFactory.decodeStream()'? –
Да, я говорю, что это правда. По какой-то причине без метода testSize он будет корректно работать с одним входным потоком и с тем же источником. Мне очень странно, что я должен был сообщить об этом как об ошибке. –
Да, я бы сказал, что это, конечно, не было ожидаемым поведением. Я не уверен, что есть другой (хороший) способ получить размер изображения из входного потока. –