Как читать удобочитаемые биты как InputStream
Там говорят некоторые ImageView
объекты. Я хочу прочитать бит/необработанные данные этого объекта как InputStream. Как это сделать?
Ответы
Ответ 1
Сначала получите фоновое изображение изображения в качестве объекта Drawable
iv.getBackground();
Затем преобразуйте Drwable-изображение в растровое изображение, используя
BitmapDrawable bitDw = ((BitmapDrawable) d);
Bitmap bitmap = bitDw.getBitmap();
Теперь используйте ByteArrayOutputStream, чтобы получить битмап в потоке и получить bytearray []
преобразовать bytearray в ByteArrayInputStream
вы можете использовать следующий код, чтобы получить входной поток из imageview
Полный исходный код
ImageView iv = (ImageView) findViewById(R.id.splashImageView);
Drawable d =iv.getBackground();
BitmapDrawable bitDw = ((BitmapDrawable) d);
Bitmap bitmap = bitDw.getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageInByte = stream.toByteArray();
System.out.println("........length......"+imageInByte);
ByteArrayInputStream bis = new ByteArrayInputStream(imageInByte);
Спасибо
Дипак
Ответ 2
Вы можете использовать кеш чертежа для извлечения растрового представления любого класса вида.
view.setDrawingCacheEnabled(true);
Bitmap b = view.getDrawingCache();
Затем вы можете записать растровое изображение в OutputStream, например:
b.compress(CompressFormat.JPEG, 80, new FileOutputStream("/view.jpg"));
В вашем случае, я думаю, вы можете использовать ByteArrayOutputStream, чтобы получить байт [], из которого вы можете создать InputStream. Код будет примерно таким:
ByteArrayOutputStream os = new ByteArrayOutputStream(b.getByteCount());
b.compress(CompressFormat.JPEG, 80, os);
byte[] bytes = os.toByteArray();
Ответ 3
Эти методы ниже полезны, поскольку они работают с любым типом Drawable (а не только с BitmapDrawable). Если вы хотите использовать кэш чертежа, как в предложении Дэвида Каунта, подумайте об использовании bitmapToInputStream
вместо bitmap.compress
, потому что он должен быть быстрее.
public static Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public static InputStream bitmapToInputStream(Bitmap bitmap) {
int size = bitmap.getHeight() * bitmap.getRowBytes();
ByteBuffer buffer = ByteBuffer.allocate(size);
bitmap.copyPixelsToBuffer(buffer);
return new ByteArrayInputStream(buffer.array());
}
Ответ 4
Возможно, вы ищете:
openRawResource