В чем разница между 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/
, где они не будут оптимизированы.