2010-11-25 3 views
50

Всякий раз, когда я пытаюсь добавить 9-патч файл в папку \drawable в моем проекте, я получаю ту же ошибку:9-патч ошибки изображения в Android

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 

Странная вещь в этом примере является то, что я У этого изображения есть изображение «android-g1-icon», найденное в ресурсах SDK, поэтому оно должно быть в порядке. То же самое произошло с любым 9-патч-изображением, которое я пробовал до сих пор. Что может быть неправильным?

+0

Вы попробовали это с вашим собственным 9.png? Когда вы определяете патчи, обязательно определяйте точно по одной стороне каждой стороны изображения. – Asahi 2010-11-25 21:28:31

ответ

10

Компилятор ресурсов разбивает 9-патчей на однопиксельные границы (и, по-видимому, сохраняет информацию, полученную из них более эффективным образом, за пределами файла .9.png). Если вы извлекли эти файлы .9.png из .apk, вам нужно будет добавить границу вручную.

+0

Хм, это имеет смысл. Странно, что изображения в ресурсах sdk уже оптимизированы, но я попытаюсь их исправить или создать вручную (хотя мои художественные способности равны нулю). Большое спасибо! – Heber 2010-11-27 12:26:57

+2

Я взял некоторые .9.png изображения из Google_Keyboard.apk и получил ту же самую проблему. Не могли бы вы подробно объяснить, как добавить границу? – 2014-01-18 11:24:52

+0

@ShaktiMalik использует 9-патч-редактор для определения патчей и дополнений для файлов - либо встроенных в Android Studio, либо в папку sdk/tools. – 2015-02-27 21:35:12

20

Это проблема с новейшим ADT, который является 20.0.3. Вместо этого вы можете переименовать * .9.png в * .png и начать работать.

Я думаю, что это ошибка только с ADT, поскольку для версии 18.0.0 ADT она не запрашивает этот тип ошибок и работает нормально.

0

Только для записи: Для меня выяснилось, что эта ошибка исходила от черной граничной линии на правой стороне и нижней стороне. Таким образом, у меня была черная рамка со всех сторон (сверху, справа, внизу и слева). Удаление избыточной правой и нижней линии работало как шарм.

3

В моем случае я ошибочно расширил черную границу в верхнем левом углу. Убедитесь, что углы прозрачны.

0

При возникновении ошибки открывается изображение в студии android. Все, что я сделал, чтобы исправить это, - это расширение любой границы паттерна одним рисованным пикселем. Я снова побежал, и это сработало. Не знаю, почему, но я повторил это несколько изображений.

4

Теперь в инструменте построения Android, AAPT и Java cruncher есть два PNG-crunchers. Обе проверки для искаженных 9 патч-изображений.

Я изучил исходный код инструмента построения. Нет возможности отключить сжатие 9 изображений патчей или игнорировать некорректные. По крайней мере, не доступны пользователям.

Так вот простой скрипт для замены AAPT:

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

При вызове сжать 9 патч файл, он будет просто скопировать файл, в противном случае, он будет запущен реальный AAPT с @ARGV ,

0

Ваш 9-патч может быть неправильным.

Возможно, вы разделите 9-патч на один пиксель и информация, полученная от них, недоступна. Попробуйте добавить нижнюю строку и строку справа для текста. Я думаю, что это поможет решить вашу проблему.

8

У меня была такая же проблема, когда я перенес проектную форму Eclipse в Android Studio.

Что вам нужно сделать, удалить .9 из имени файла изображения, а затем открыть его в инструменте draw9patch (находящемся в каталоге/sdk/tools), а теперь нажмите кнопку «Показать плохие патчи» справа вверху угол.

Затем вы должны увидеть плохие пиксели и области, отмеченные красным цветом, вам нужно выполнить какую-либо работу там, пока у вас не будет красных плохих патчей.Для меня я просто пометил один пиксель на среднем левом краю и один пиксель на среднем верхнем краю и обозначил почти все правые края и нижний край. нажмите кнопку еще раз и убедитесь, что у вас нет плохих патчей.

Сохраните файл как .9.png и верните его в папку res вашего проекта. Затем Android Studio должен создать проект без проблем для 9 патч-ямджей.

1

Для меня проблема заключается в том, что я создал сам патч 9. Я думал, что достаточно иметь границу 1 px на левом и верхнем краях, но вам нужно убедиться, что изображение имеет границу 1 px на каждом ребре.

28

Я сталкивался с такой же проблемой на 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. 

Это, как я решил это: Открыть инструмент draw9patch в вашем каталоге Android SDK

cd /Android/sdk/tools 
./draw9patch 

Открыть +0,9 PNG и сохранить его еще раз. Надеюсь, поможет.

0

Когда мы девять патчей, любое изображение создает черную линию на ее границе. Эта граница должна быть прозрачной или полностью твердой. Если это не так, эта ошибка придет.

Таким образом, решение заключается в увеличении ширины и высоты на два пикселя. (В Photoshop увеличьте размер холста, а не изображение.)

2

Если вы делаете изображение с помощью онлайн-генератора, вы должны удалить любые специальные символы из имени для его работы.

0

Я решил это, изменив масштаб растяжения в Android Studio.

0

Я нашел, что проблема касается файлов * .9.png. Откройте и проверьте все свои 9-патч-файлы, убедитесь, что все файлы имеют черную ширину в 1 пиксель, если этого не делают, просто нажмите на белое место и добавьте его, а затем сохраните.

Это единственное решение моей проблемы.