В чем разница между Bitmap и Drawable в Android?

Я googled, но я не мог найти какую-либо статью, чтобы описать разницу между Bitmap и Drawable в Android.

Ответ 1

Растровое изображение представляет собой изображение растрового изображения (что-то вроде java.awt.Image). Drawable - это абстракция "что-то, что можно нарисовать". Это может быть битмап (завернутый как BitmapDrawable), но он также может быть сплошным цветом, набором других объектов Drawable или любого количества других структур.

В большинстве интерфейсов пользовательского интерфейса Android нравится работать с объектами Drawable, а не с Bitmap. A View может принимать любые Drawable в качестве фона. ImageView может отображать передний план Drawable. Изображения, хранящиеся как ресурсы, загружаются как объекты с возможностью рисования.

Ответ 2

Drawable - это то, что можно нарисовать. Например. макет, векторное изображение (линия, круг), шрифт, изображение и т.д.

Bitmap - это определенный тип Drawable, который является изображением, например: PNG, JPEG или так

Ответ 3

Растровое изображение не является изображением. Битовая карта - это битовая карта (примечание: Битовая карта). И эта карта представляет пиксели, на которых вы можете что-то нарисовать. Это может быть ваше собственное растровое изображение (не изображение), например квадрат:

Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);

или вы можете создать растровый объект из изображения:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);    

Растровое изображение - это пиксельный держатель. А Canvas используется для рисования чего-либо на вашем растровом изображении (на растровых пикселях).

Все о Drawable хорошо описано выше.

TL; DR

Некоторые люди пишут, что вы рисуете на холсте. Вы не рисуете на холсте. Вы рисуете на растровых пикселях с помощью вспомогательного метода Canvas.

Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.RED) // now all bitmap pixels became red

Ответ 4

Ресурс <Ресурсы >

Ресурс

A Drawable - это общая концепция графического объекта, который можно отобразить на экране и который вы можете получить с помощью API, например getDrawable(int), или применить к другому ресурсу XML с такими атрибутами, как android:drawable и android:icon. Существует несколько различных типов чертежей:

  • Растровый файл, графический файл растрового изображения (.png,.jpg или .gif), создает BitmapDrawable.

  • Nine-Patch File, A PNG файл с растягиваемыми областями, чтобы разрешить изменение размера изображения на основе содержимого (.9.png), создает NinePatchDrawable.

  • Список слоев, A Drawable, который управляет массивом других Drawable s. Они рисуются в порядке массива, поэтому элемент с наибольшим индексом нарисован сверху, создает LayerDrawable.

  • Список состояний, файл XML, который ссылается на разные растровые графики для разных состояний (например, для использования другого изображения при нажатии кнопки) создает StateListDrawable.

  • Список уровней, XML, который определяет Drawable, который управляет несколькими альтернативными Drawable s, каждый из которых назначает максимальное числовое значение, создает LevelListDrawable.

  • Transable Drawable, файл XML, который определяет Drawable, который может перекрестно затухать между двумя ресурсами Drawable, создает TransitionDrawable.

  • Вставка Drawable, файл XML, который определяет Drawable, который вставляет другой Drawable на указанное расстояние. Это полезно, когда a View нуждается в фоновом Drawble, который меньше, чем просмотр фактических границ.

  • Clip Drawable, файл XML, который определяет Drawable, который скопирует другой Drawable на основе этого значения текущего уровня Drawable, создает ClipDrawable.

  • Масштабируемый Drawable, файл XML, который определяет Drawable, который изменяет размер другого Drawable на основе его текущего значения уровня, создает ScaleDrawable.

  • Форма Drawable, файл XML, который определяет геометрическую форму, включая цвета и градиенты, создает ShapeDrawable.

Также см. документ "Ресурс анимации" для создания AnimationDrawable.

Примечание. Ресурс цвета также можно использовать как Ddrawable в XML. Например, при создании StateListDrawable вы можете ссылаться на ресурс цвета для атрибута android:drawable (android:drawable="@color/green").

Растровые

Растровое изображение. Android поддерживает файлы растровых изображений в трех форматах:.png(предпочтительно),.jpg(приемлемый),.gif(обескуражен).

Вы можете напрямую ссылаться на файл растрового изображения, используя имя файла в качестве идентификатора ресурса или создать идентификатор ресурса псевдонима в XML.

Примечание. Растровые файлы могут автоматически оптимизироваться при сжатии без потерь с помощью инструмента aapt во время процесса сборки. Например, PNG с истинным цветом, который не требует более 256 цветов, может быть преобразован в 8-битный PNG с цветовой палитрой. Это приведет к качеству изображения, но для этого требуется меньше памяти. Поэтому имейте в виду, что двоичные файлы изображений, размещенные в этом каталоге, могут меняться во время сборки. Если вы планируете читать изображение в виде потока бит, чтобы преобразовать его в растровое изображение, поместите изображения в папку res/raw/, где они не будут оптимизированы.