webentwicklung-frage-antwort-db.com.de

9-Patch-Bildfehler in Android

Immer wenn ich versuche, ein Bild mit 9 Patches in den \drawable-Ordner meines Projekts aufzunehmen, erhalte ich die gleiche Fehlermeldung:

ERROR: 9-patch image C:\...\res\drawable\appwidget.9.png malformed.
Frame pixels must be either solid or transparent (not intermediate alphas).
Found at pixel #3 along top Edge. Failure processing PNG image
C:\...\res\drawable\appwidget.9.png

Das seltsame an diesem Beispiel ist, dass ich dieses Bild von den "Android-g1-icon" Bildern in den SDK-Ressourcen erhalten habe. Es sollte also OK sein. Dasselbe passierte mit jedem 9-Patch-Bild, das ich bisher ausprobiert habe. Was könnte falsch sein?

55
Heber

Ich bin mit dem gleichen Problem auf Android Studio gestoßen:

AAPT out(943142208) : No Delegate set : lost message:Done
AAPT err(943142208): ERROR: 9-patch image /Users/cartman/Github/UteacherAndroid/RefactorDemo/app/src/main/res/drawable-xxhdpi/nav_shabow.9.png malformed.
AAPT err(943142208):        Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT err(943142208):        Found at pixel #1 along left Edge.

So habe ich es gelöst: Öffnen Sie das draw9patch-Tool in Ihrem Android-Sdk-Verzeichnis 

cd /Android/sdk/tools
./draw9patch

Öffnen Sie .9 png und speichern Sie es erneut. Ich hoffe es hilft.

31
Jiawei Dai

Das ist das Problem mit dem neuesten ADT, das 20.0.3 ist. Sie können stattdessen die * .9.png in * .png umbenennen und mit der Arbeit beginnen.

Ich denke, das ist nur der Fehler mit dem ADT, da für ADT der Version 18.0.0 keine Aufforderung für diese Art von Fehler angezeigt wird und gut funktioniert.

21

Der Ressourcen-Compiler entfernt 9-Patches um 1 Pixel-Ränder (und speichert vermutlich die daraus gewonnenen Informationen effizienter außerhalb der .9.png-Datei). Wenn Sie diese .9.png-Dateien aus einer .apk-Datei herausgefiltert haben, müssen Sie den Rand von Hand wieder hinzufügen.

11
Reuben Scratton

Ich hatte das gleiche Problem, als ich ein Projekt von Eclipse zu Android Studio migrierte. 

Was Sie tun müssen, ist, .9 aus dem Dateinamen der Image-Datei zu entfernen und es dann mit dem draw9patch-Tool (im Verzeichnis/sdk/tools) zu öffnen. Klicken Sie nun auf die Schaltfläche Bad Patches anzeigen in der rechten oberen Ecke. 

Sie sollten dann die fehlerhaften Pixel und Bereiche sehen, die rot markiert sind. Sie müssen dort etwas arbeiten, bis Sie keine roten fehlerhaften Patches haben. Für mich habe ich nur einen Pixel am mittleren linken Rand und einen Pixel am oberen oberen Rand und fast den gesamten rechten und unteren Rand markiert. Klicken Sie erneut auf die Schaltfläche und stellen Sie sicher, dass Sie keine fehlerhaften Patches haben. 

Speichern Sie die Datei als .9.png und legen Sie sie wieder im Ordner res Ihres Projektes ab. Android Studio sollte dann Ihr Projekt ohne Probleme für 9 Patch-Patches erstellen. 

8
Moti Bartov

Jetzt gibt es zwei PNG-Crunchers im Android-Build-Tool, AAPT und einen Java-Cruncher. Beide werden auf fehlerhafte 9-Patch-Bilder geprüft.

Ich habe mir den Quellcode des Build-Tools angesehen. Es gibt keine Option zum Deaktivieren der Komprimierung für 9 Patch-Images oder zum Ignorieren fehlerhafter Patches. Zumindest nicht für Benutzer verfügbare Optionen.

Hier ist ein einfaches Skript, um AAPT zu ersetzen:

https://Gist.github.com/ksc91u/37513796b2cec37bb3c5

Bei einem Aufruf zum Komprimieren eines 9-Patch-Images wird die Datei einfach kopiert. Andernfalls wird das echte AAPT mit @ARGV gestartet.

4
ksc91u

In meinem Fall habe ich versehentlich den schwarzen Rand in die linke obere Ecke erweitert. Stellen Sie sicher, dass die Ecken transparent sind. 

3
bradley4

Wenn Sie das Bild mit einem Online-Generatorwerkzeug erstellen, müssen Sie alle Sonderzeichen aus dem Namen entfernen, damit das Bild funktioniert.

2
mbpatel

Für mich scheint das Problem zu sein, dass ich den 9-Patch selbst erstellt habe. Ich dachte, es sei genug, um einen linken Rand und einen oberen Rand von 1 px zu haben, aber Sie müssen sicherstellen, dass das Bild an jedem Rand einen Rand von 1 px hat.

1
Guido Kersten

Nur fürs Protokoll: Für mich stellte sich heraus, dass dieser Fehler von einem schwarzen Rand auf der rechten Seite und der Unterseite herrührte. Ich hatte also auf jeder Seite einen schwarzen Rand (oben, rechts, unten und links). Das Entfernen der überflüssigen rechten und unteren Linie funktionierte wie ein Zauber.

1

Dein 9-Patch kann falsch sein.

Vielleicht entfernen Sie 9-Patches mit einem Pixel, und die daraus gewonnenen Informationen sind nicht verfügbar. Versuchen Sie, eine untere Zeile und eine rechte Zeile auch für Text hinzuzufügen. Ich denke, es wird helfen, Ihr Problem zu lösen.

0
QArea

Ich habe es gelöst, indem ich den Stretch-Bereich in Android Studio geändert habe.

0
chefish

Wenn der Fehler auftritt, wird das Bild auch in Android Studio geöffnet. Um dies zu korrigieren, musste ich nur die Patch-Ränder um ein einzelnes gezeichnetes Pixel erweitern. Ich lief wieder und es hat funktioniert. Ich weiß nicht warum, aber ich teste dies mit mehreren Bildern.

0
dbconfession

Wenn wir ein Bild neu patchen, wird eine schwarze Linie am Rand erzeugt. Diese Grenze sollte transparent oder vollständig fest sein. Wenn nicht, wird dieser Fehler kommen.

Die Lösung besteht also darin, die Breite und Höhe um zwei Pixel zu erhöhen. (In Photoshop vergrößern Sie die Leinwand, nicht das Bild.)

0

Ich habe festgestellt, dass es sich bei dem Problem um * .9.png-Dateien handelt. Öffnen und überprüfen Sie alle 9-Patch-Dateien. Stellen Sie sicher, dass alle Dateien einen schwarzen, 1 Pixel breiten Rand haben. Wenn nicht, klicken Sie einfach auf die weiße Stelle, fügen Sie sie hinzu und speichern Sie sie.

Es ist die einzige Lösung für mein Problem.

0
Akash Bisariya