programing

Android의 9 패치 이미지 오류

nasanasas 2020. 12. 25. 10:05
반응형

Android의 9 패치 이미지 오류


\drawable내 프로젝트 폴더에 9 패치 이미지를 추가하려고 할 때마다 동일한 오류가 발생합니다.

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

이 예제에서 이상한 점은 SDK 리소스에있는 "android-g1-icon"이미지에서이 이미지를 얻었으므로 정상이어야한다는 것입니다. 지금까지 시도한 모든 9 패치 이미지에서도 마찬가지입니다. 무엇이 잘못 되었을까요?


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.

이것이 내가 해결 한 방법입니다. Android Sdk 디렉토리에서 draw9patch 도구를 엽니 다.

cd /Android/sdk/tools
./draw9patch

.9 png를 열고 다시 저장하십시오. 도움이 되었기를 바랍니다.


이것은 20.0.3 인 최신 ADT의 문제입니다. 대신 * .9.png의 이름을 * .png로 바꾸고 작업을 시작할 수 있습니다.

18.0.0 버전 ADT의 경우 이러한 유형의 오류를 표시하지 않고 제대로 작동하기 때문에 이것이 ADT의 버그라고 생각합니다.


리소스 컴파일러는 1 픽셀 테두리를 9 패치로 제거합니다 (아마도 .9.png 파일 외부에서보다 효율적인 방식으로 얻은 정보를 저장합니다). .apk에서 이러한 .9.png 파일을 낚시했다면 테두리를 다시 손으로 추가해야합니다.


Eclipse에서 Android Studio로 프로젝트를 마이그레이션 할 때 동일한 문제가 발생했습니다.

해야 할 일은 이미지 파일 이름에서 .9를 제거한 다음 draw9patch 도구 (/ sdk / tools 디렉터리에 있음)에서 연 다음 오른쪽 상단 모서리에있는 Show Bad Patches 버튼을 클릭하는 것입니다.

그런 다음 빨간색으로 표시된 불량 픽셀과 영역을 볼 수 있습니다. 빨간색 불량 패치가 없을 때까지 몇 가지 작업을 수행해야합니다. 저에게는 왼쪽 중간 가장자리에 한 픽셀, 중간 상단 가장자리에 한 픽셀을 표시하고 거의 모든 오른쪽 가장자리와 아래쪽 가장자리를 표시했습니다. 버튼을 다시 클릭하고 나쁜 패치가 없는지 확인하십시오.

파일을 .9.png로 저장하고 프로젝트의 res 폴더에 다시 넣으십시오. 그런 다음 Android Studio는 9 개의 패치 이미지에 대해 문제없이 프로젝트를 빌드해야합니다.


제 경우에는 실수로 검은 색 테두리를 왼쪽 상단 모서리로 확장했습니다. 모서리가 투명한지 확인하십시오.


이제 Android 빌드 도구에 두 개의 PNG 크 런처, AAPT 및 Java 크 런처가 있습니다. 둘 다 잘못된 형식의 9 패치 이미지를 확인합니다.

빌드 도구의 소스 코드를 살펴 보았습니다. 9 개의 패치 이미지에서 압축을 비활성화하거나 잘못된 형식을 무시하는 옵션은 없습니다. 적어도 사용자가 사용할 수있는 옵션이 없습니다.

다음은 AAPT를 대체하는 간단한 스크립트입니다.

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

9 패치 이미지를 압축하기 위해 호출되면 단순히 파일을 복사하고, 그렇지 않으면 @ARGV로 실제 AAPT를 시작합니다.


온라인 생성기 도구를 사용하여 이미지를 만드는 경우 작동하려면 이름에서 특수 문자를 제거해야합니다.


기록을 위해 :이 오류는 오른쪽 사이트와 아래쪽의 검은 색 경계선에서 비롯된 것으로 나타났습니다. 그래서 모든면 (위쪽, 오른쪽, 아래쪽 및 왼쪽)에 검은 색 테두리가 있습니다. 중복되는 오른쪽 및 하단 라인을 제거하는 것은 매력처럼 작동했습니다.


나에게 문제는 9 패치를 직접 만든 것 같습니다. 왼쪽과 위쪽 가장자리에 1px 테두리가 있으면 충분하다고 생각했지만 이미지의 각 가장자리에 1px 테두리가 있는지 확인해야합니다.


오류가 발생하면 Android 스튜디오에서도 이미지가 열립니다. 이 문제를 해결하기 위해 한 것은 단일 그려진 픽셀로 패치 테두리를 확장하는 것뿐이었습니다. 나는 다시 실행했고 작동했습니다. 이유는 확실하지 않지만 여러 이미지로 이것을 반복 테스트했습니다.


문제는 * .9.png 파일에 관한 것입니다. 모든 9- 패치 파일을 열고 확인하고, 모든 파일에 1 픽셀 너비의 검정색 테두리가 있는지 확인하고,없는 경우 흰색 위치를 클릭하여 추가 한 다음 저장합니다.

내 문제에 대한 유일한 해결책입니다.


9 패치가 잘못되었을 수 있습니다.

9 패치 1 픽셀 테두리를 제거하고 그로부터 얻은 정보를 사용할 수 없을 수도 있습니다. 텍스트에 대한 결론과 올바른 줄을 추가하십시오. 나는 그것이 당신의 문제를 해결하는 데 도움이 될 것이라고 생각합니다.


이미지를 9 개 패치하면 테두리에 검은 색 선이 생성됩니다. 그 테두리는 투명하거나 완전히 단단해야합니다. 그렇지 않은 경우이 오류가 발생합니다.

따라서 해결책은 너비와 높이를 2 픽셀 씩 늘리는 것입니다. (Photoshop에서는 이미지가 아닌 캔버스의 크기를 늘립니다.)


Android Studio에서 스트레치 범위를 변경하여 문제를 해결했습니다.

참조 URL : https://stackoverflow.com/questions/4280398/9-patch-image-error-in-android

반응형