Was ist der Unterschied zwischen Bitmap und Drawable in Android?

Lesezeit: 6 Minuten

Benutzer-Avatar
Nikhil C. George

Ich habe gegoogelt, aber ich konnte keinen Artikel finden, der den Unterschied zwischen Bitmap und Drawable in Android beschreibt.

  • Diese Lösung sollte Ihre Fragen beantworten können: Lösung

    – Jrom

    20. Januar 2012 um 5:24 Uhr

Benutzer-Avatar
Ted Hopp

Eine Bitmap ist eine Darstellung eines Bitmap-Bildes (etwas wie java.awt.Image). Ein Drawable ist eine Abstraktion von “etwas, das gezeichnet werden kann”. Es könnte eine Bitmap sein (verpackt als BitmapDrawable), aber es könnte sich auch um eine Volltonfarbe, eine Sammlung anderer Drawable-Objekte oder eine beliebige Anzahl anderer Strukturen handeln.

Der größte Teil des Android-UI-Frameworks arbeitet gerne mit Drawable-Objekten, nicht mit Bitmap-Objekten. Eine Ansicht kann jedes Drawable als Hintergrund akzeptieren. Eine ImageView kann ein Drawable im Vordergrund anzeigen. Als Ressourcen gespeicherte Bilder werden als Drawable-Objekte geladen.

  • Wenn ein bitmapDrawable eine bitmap umschließt, was würde passieren, wenn wir recycle() für die darin enthaltene bitmap aufrufen? auch, was macht recycle() für API11 und höher?

    – Android-Entwickler

    14. August 2012 um 12:41 Uhr

  • @androiddeveloper – Ich bin mir nicht sicher, aber es wird nichts Gutes sein. Sobald eine Bitmap von einem BitmapDrawable umschlossen ist, „besitzt“ das Drawable die Bitmap und soll ihr Leben verwalten. Wenn Sie anrufen recycle(), Sie stören diese Beziehung. Im besten Fall zeichnet das Drawable nichts; Wahrscheinlicher ist, dass später eine Art Ausnahme ausgelöst wird. Entsprechend die Dokumente, recycle() mit API11+ macht dasselbe wie immer: Sie können die nativen Pixel freigeben, sobald Sie wissen, dass Sie damit fertig sind.

    –Ted Hopp

    14. August 2012 um 15:26 Uhr

  • Sie sagen dort, dass es den nativen Speicher der Bitmap freigibt, aber wir wissen, dass sich seit API 11 alles, was mit der Bitmap zu tun hat (einschließlich ihrer Rohdaten), im Heap befindet, also scheint das Recyceln eine seltsame Sache zu sein …

    – Android-Entwickler

    14. August 2012 um 21:46 Uhr

  • @androiddeveloper – Mit Blick auf die Quelle, es scheint, dass es immer noch eine native Bitmap gibt. Aus Leistungsgründen wird der Rohpuffer als öffentliches Mitglied bereitgestellt (obwohl er immer noch vor der öffentlichen API verborgen ist). Berufung recycle() wird weiterhin die native Bitmap freigeben; Es wird auch den Mitgliedspuffer auf setzen null.

    –Ted Hopp

    15. August 2012 um 1:25 Uhr

  • Ja, ich habe es auch gelesen, aber es macht keinen Sinn, da sie auf Google IO sagten, dass die Bitmap nicht mehr im nativen Speicher gespeichert ist. Ich bin wirklich verwirrt, wie das sein kann.

    – Android-Entwickler

    15. August 2012 um 5:57 Uhr

Bitmap ist kein Bild. Bitmap ist eine Bitmap (beachten Sie den Namen: Bitmap). Und diese Karte stellt Pixel dar, auf denen Sie etwas zeichnen können. Es kann Ihre eigene benutzerdefinierte Bitmap sein (kein Bild), zum Beispiel quadratisch:

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

oder Sie können ein Bitmap-Objekt aus einem Bild erstellen:

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

Eine Bitmap ist ein Pixelhalter. Und Canvas wird verwendet, um etwas auf Ihrer Bitmap (auf Bitmap-Pixeln) zu zeichnen.

Alles über Drawable ist oben gut beschrieben.

TL;DR

Manche Leute schreiben, dass du auf Canvas zeichnest. Sie zeichnen nicht auf Leinwand. Sie zeichnen auf Bitmap-Pixeln mit der Canvas-Hilfsmethode.

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

  • Nette Antwort verdient +1 🙂 Danke für die Erklärung durch Codezeilen.

    – HarshitMadhav

    1. August 2018 um 14:31 Uhr

  • perfekt erklärt

    – Tuschar Srivastava

    24. Januar 2019 um 9:15 Uhr

Benutzer-Avatar
Barmaley

Drawable ist etwas, das gezeichnet werden kann. ZB Layout, Vektorbild (Linie, Kreis), Schriftart, Bild und so weiter

Bitmap – ist ein bestimmter Drawable-Typ, bei dem es sich um ein Bild handelt, wie z. B. PNG, JPEG oder so

  • EIN Bitmap (android.graphics.Bitmap) ist keine Unterklasse von Ziehbar (android.graphics.drawable.Drawable).

    –Ted Hopp

    20. Januar 2012 um 15:16 Uhr

  • Klar, es ist meine Schuld. Ich meinte BitmapDrawable

    – Barmaley

    20. Januar 2012 um 17:53 Uhr

  • Aber sie sagen Bitmap: das einfachste Drawable, ein PNG- oder JPEG-Bild. in Dokumenten.

    – Mallaudin

    21. November 2018 um 13:46 Uhr

  • Ich dachte, ich hätte diesen Link eingefügt. developer.android.com/guide/topics/resources/…

    – Mallaudin

    4. Dezember 2018 um 16:25 Uhr

Benutzer-Avatar
Misbah Farooqi

Ziehbare Ressource

EIN Drawable Ressource ist ein allgemeines Konzept für eine Grafik, die auf den Bildschirm gezeichnet werden kann und die Sie mit APIs wie abrufen können getDrawable(int) oder gelten für eine andere XML-Ressource mit Attributen wie z android:drawable und android:icon. Es gibt verschiedene Arten von Drawables:

  • Bitmap-DateiEine Bitmap-Grafikdatei (.png, .jpg oder .gif), erstellt eine BitmapDrawable.

  • Neun-Patch-DateiEIN PNG Datei mit dehnbaren Bereichen, um die Bildgröße basierend auf dem Inhalt (.9.png) zu ändern, erstellt eine NinePatchDrawable.

  • EbenenlisteEIN Drawable das verwaltet eine Reihe von anderen Drawables. Diese werden in Array-Reihenfolge gezeichnet, sodass das Element mit dem größten Index oben gezeichnet wird, erstellt a LayerDrawable.

  • Staatliche ListeEin XML Datei, die verschiedene Bitmap-Grafiken für verschiedene Zustände referenziert (z. B. um ein anderes Bild zu verwenden, wenn eine Schaltfläche gedrückt wird), erstellt eine StateListDrawable.

  • EbenenlisteEin XML Datei, die eine definiert Drawable das verwaltet eine Reihe von alternativen Drawables, denen jeweils ein maximaler numerischer Wert zugeordnet ist, erstellt a LevelListDrawable.

  • Übergang DrawbarEin XML Datei, die eine definiert Drawable die zwischen zwei überblenden kann Drawable Ressourcen, schafft a TransitionDrawable.

  • Einschub DrawableEin XML Datei, die eine definiert Drawable das setzt ein anderes ein Drawable um einen bestimmten Abstand. Dies ist nützlich, wenn a View braucht einen Hintergrund Drawble das ist kleiner als die tatsächlichen Grenzen der Ansicht.

  • Clip DrawbarEin XML Datei, die eine definiert Drawable das schneidet einen anderen ab Drawable basierend auf Drawable‘s aktueller Levelwert, erstellt a ClipDrawable.

  • MaßstabsgetreuEin XML Datei, die eine definiert Drawable das ändert die Größe eines anderen Drawable basierend auf seinem aktuellen Levelwert, erstellt a ScaleDrawable.

  • Form ziehbarEin XML Datei, die eine geometrische Form definiert, einschließlich Farben und Farbverläufe, erstellt eine ShapeDrawable.

Sehen Sie sich auch das Animationsressourcendokument an, um zu erfahren, wie man eine erstellt AnimationDrawable.

Hinweis: Eine Farbressource kann auch als verwendet werden Ddrawable in XML. Zum Beispiel beim Erstellen einer StateListDrawablekönnen Sie auf eine Farbressource für die verweisen android:drawable Attribut (android:drawable="@color/green").

Bitmap

Ein Bitmap-Bild. Android unterstützt Bitmap-Dateien in drei Formaten: .png (bevorzugt), .jpg (akzeptabel), .gif (nicht empfohlen).

Sie können direkt auf eine Bitmap-Datei verweisen, indem Sie den Dateinamen als Ressourcen-ID verwenden, oder eine Alias-Ressourcen-ID in XML erstellen.

Hinweis: Bitmap-Dateien können während des Erstellungsprozesses automatisch mit verlustfreier Bildkomprimierung durch das aapt-Tool optimiert werden. Beispielsweise kann ein True-Color-PNG, das nicht mehr als 256 Farben erfordert, in ein 8-Bit-PNG mit einer Farbpalette konvertiert werden. Dies führt zu einem Bild mit gleicher Qualität, das jedoch weniger Speicher benötigt. Beachten Sie also, dass sich die in diesem Verzeichnis abgelegten Image-Binärdateien während des Builds ändern können. Wenn Sie vorhaben, ein Bild als Bitstream zu lesen, um es in eine Bitmap umzuwandeln, legen Sie Ihre Bilder in die res/raw/ Ordner stattdessen, wo sie nicht optimiert werden.

1283240cookie-checkWas ist der Unterschied zwischen Bitmap und Drawable in Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy