web-dev-qa-db-fra.com

Erreur d'image 9-patch dans Android

Chaque fois que j'essaie d'ajouter une image de 9 correctifs au dossier \drawable de mon projet, j'obtiens la même erreur:

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

La chose étrange dans cet exemple est que j'ai obtenu cette image à partir des images "Android-g1-icon" trouvées dans les ressources du SDK. La même chose s'est produite avec n'importe quelle image de 9 patchs que j'ai essayée jusqu'à présent. Quel pourrait être le problème?

55
Heber

J'ai rencontré le même problème sur Android Studio:

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.

Voici comment j'ai résolu le problème: Ouvrez l'outil draw9patch dans votre répertoire Android Sdk. 

cd /Android/sdk/tools
./draw9patch

Ouvrez .9 png et enregistrez-le à nouveau. J'espère que ça aide.

31
Jiawei Dai

C'est le problème avec le dernier ADT qui est 20.0.3. Vous pouvez à la place renommer * .9.png en * .png et commencer à fonctionner.

Je pense que c'est le bogue avec ADT uniquement, car pour ADT version 18.0.0, il ne demande pas ce type d'erreur et fonctionne correctement.

21
change_is_necessity

Le compilateur de ressources élimine les bandes de 9 pixels de 9 patchs (et stocke vraisemblablement les informations obtenues d'eux de manière plus efficace en dehors du fichier .9.png). Si vous avez exploité ces fichiers .9.png dans un fichier .apk, vous devez ajouter la bordure à la main.

11
Reuben Scratton

J'ai eu le même problème lorsque j'ai migré un projet sous la forme Eclipse vers Android Studio. 

Ce que vous devez faire est de supprimer .9 du nom du fichier image, puis ouvrez-le dans l'outil draw9patch (situé dans votre répertoire/sdk/tools) et cliquez maintenant sur le bouton Afficher les correctifs incorrects dans le coin supérieur droit. 

Vous devriez alors voir les pixels défectueux et les zones marquées en rouge, vous devez y travailler jusqu'à ce que vous n'ayez plus de taches rouges. En ce qui me concerne, je viens de marquer un pixel sur le bord moyen gauche et un pixel sur le bord supérieur moyen, ainsi que presque tout le bord droit et le bord inférieur. Cliquez à nouveau sur le bouton et vérifiez que vous n'avez pas de mauvais correctifs. 

Enregistrez le fichier sous .9.png et replacez-le dans le dossier res de votre projet. Android Studio devrait alors construire votre projet sans problème pour 9 patchs. 

8
Moti Bartov

Il existe maintenant deux outils de compression PNG dans l'outil de génération Android, AAPT et un programme cruncher Java. Les deux vérifie la présence de 9 images correctives mal formées.

J'ai examiné le code source de l'outil de construction. Il n’existe pas d’option permettant de désactiver la compression sur une image de correctif ou d’ignorer les images mal formées. Du moins pas les options disponibles pour les utilisateurs.

Voici donc un script simple pour remplacer AAPT:

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

Lorsqu'il est appelé pour compresser une image de 9 correctifs, il copiera simplement le fichier, sinon, il lancera le vrai AAPT avec @ARGV.

4
ksc91u

Dans mon cas, j'ai prolongé par erreur la bordure noire dans le coin supérieur gauche. Assurez-vous que les coins sont transparents. 

3
bradley4

Si vous créez l'image à l'aide d'un outil de génération en ligne, vous devez supprimer tous les caractères spéciaux du nom pour que cela fonctionne.

2
mbpatel

Pour moi, le problème semble être que j'ai créé le correctif moi-même. Je pensais qu'il était suffisant d'avoir une bordure de 1 px sur les bords gauche et supérieur, mais vous devez vous assurer que l'image possède une bordure de 1 px sur chaque bord.

1
Guido Kersten

Juste pour le compte rendu: Pour moi, il s’est avéré que cette erreur venait d’une bordure noire sur le site de droite et en bas. J'ai donc eu une bordure noire de chaque côté (en haut, à droite, en bas et à gauche). La suppression des lignes droite et inférieure redondantes a fonctionné à merveille.

1
Langusten Gustel

Votre 9-patch peut être faux.

Peut-être que vous supprimez les bordures d'un pixel de 9 pixels et que les informations obtenues ne sont pas accessibles Essayez d’ajouter une ligne inférieure et une ligne droite pour le texte. Je pense que cela aidera à résoudre votre problème.

0
QArea

Je l'ai résolu en modifiant l'étendue dans Android Studio.

0
chefish

Lorsque l'erreur survient, elle ouvre également l'image dans le studio Android. Tout ce que j'ai fait pour résoudre ce problème a été d'étendre les limites du patch d'un pixel dessiné. J'ai re-couru et cela a fonctionné. Je ne sais pas pourquoi, mais je le répète testé avec plusieurs images.

0
dbconfession

Lorsque nous modifions une image, elle crée une ligne noire sur sa bordure. Cette bordure doit être transparente ou complètement solide. Si ce n'est pas le cas, cette erreur viendra.

La solution consiste donc à augmenter la largeur et la hauteur de deux pixels. (Dans Photoshop, augmentez la taille de la toile, pas celle de l'image.)

0

J'ai trouvé que le problème concerne les fichiers * .9.png. Ouvrez et vérifiez tous vos fichiers 9-Patch, assurez-vous que tous les fichiers ont une bordure noire large de 1 pixel. Sinon, cliquez simplement sur l'endroit blanc et ajoutez-le, puis enregistrez-le.

C'est la seule solution à mon problème.

0
Akash Bisariya