Android中的9-patch图像错误

Android中的9-patch图像错误,android,nine-patch,aapt,Android,Nine Patch,Aapt,每当我尝试向项目中的\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

每当我尝试向项目中的
\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面片图像都会出现同样的情况。可能有什么问题?

资源编译器将9个补丁从一个像素的边界中剥离出来(并以一种更有效的方式将从中获得的信息存储在.9.png文件之外)。如果您从.apk中提取了这些.9.png文件,则需要手动添加边框。

这就是最新的ADT 20.0.3的问题所在。您可以将*.9.png重命名为*.png并开始工作

我认为这只是ADT的缺陷,因为对于18.0.0版本的ADT,它不会提示此类错误,并且工作正常。

仅供记录:
对我来说,这个错误来自于右侧站点和底部的黑色边界线。所以我在每一边(顶部、右侧、底部和左侧)都有一个黑色边框。删除多余的右边框和底边框非常有效。

在我的例子中,我错误地将黑色边框延伸到左上角。确保角落是透明的

当出现错误时,它也会在android studio中打开图像。我所做的只是将任何面片边界延伸一个像素。我重新运行,它工作了。不知道为什么,但我用几个图像重复测试了这一点。

现在Android构建工具中有两个PNG处理器,AAPT和Java处理器。两个都会检查格式不正确的9个修补程序映像

我已经研究了构建工具的源代码。没有选项可以禁用9补丁图像的压缩或忽略格式错误的图像。至少没有用户可用的选项

下面是一个简单的脚本来替换AAPT:


调用压缩9补丁映像时,它只需复制文件,否则,它将使用@ARGV启动真正的AAPT。

您的9补丁可能是错误的


也许你把9个面片的一个像素边界去掉,从中获得的信息就不可用了。尝试为文本添加一条底线和一条右线。我认为这将有助于解决您的问题。

当我将一个项目从Eclipse迁移到Android Studio时,我也遇到了同样的问题

您需要做的是,从映像文件名中删除.9,然后在draw9patch tool(位于/sdk/tools目录中)中打开它,然后单击右上角的“显示坏补丁”按钮

然后你应该看到坏像素和区域标记为红色,你需要做一些工作,直到你没有红色坏补丁。对我来说,我只在左中边缘标记了一个像素,在中上边缘标记了一个像素,并且标记了几乎所有的右边缘和下边缘。再次单击按钮,查看是否没有坏补丁


将文件另存为.9.png,并将其放回项目的res文件夹中。Android Studio然后应该为9个补丁创建一个没有问题的项目

对我来说,问题似乎是我自己创建了9补丁。我认为在左边缘和上边缘有一个1像素的边框就足够了,但是你需要确保图像的每一个边缘都有一个1像素的边框。

我在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并再次保存。希望有帮助。

当我们修补任何图像时,它会在其边框上创建一条黑线。该边界应为透明或完全实心。如果不是,则会出现此错误


因此,解决方案是将宽度和高度增加两个像素。(在Photoshop中,增加画布的大小,而不是图像的大小。)

如果您使用在线生成器工具制作图像,则必须从名称中删除任何特殊字符才能使其工作。

我已通过在Android Studio中更改拉伸范围解决了此问题。

我发现问题与*.9.png文件有关。打开并检查所有9-Patch文件,确保所有文件都有1像素宽的黑色边框,如果没有,只需单击白色区域并添加,然后保存即可


这是解决我问题的唯一办法。

你用自己的9.png试过了吗?定义面片时,请确保沿imageHmm的每一侧精确定义一个面片,这很有意义。sdk资源中的图像已经优化了,这很奇怪,但我会尝试修复它们或手动创建一个(尽管我的艺术能力是空的)。非常感谢!我从Google_Keyboard.apk获取了一些.9.png图像,得到了同样的问题。您能详细解释一下如何添加边框吗?@ShaktiMalik使用一个9补丁编辑器来定义文件的补丁和填充,可以是内置在Android Studio中的补丁,也可以是sdk/tools文件夹中的补丁。AAPT如何存储9补丁元信息?我试着组装APK(就在Android studio中),从编译的APK中获取一个压缩的9-patch,在GIMP中重新压缩它(保存注释),然后用修改的9-patch修补APK。但是,它似乎不再以正确的方式拉伸它了。什么可能是错误的,AAPT如何处理9-补丁PNG?使用源。。。这看起来像是一个解决办法。但这已经解决了我的问题。感谢将这些.9.png重命名为.png图像会导致我的应用程序行为出现任何差异。我的意思是,这些重命名的.png图像是否会像.9.pngs一样拉伸?使用这些图像,您将能够在设备或模拟器中运行应用程序而不会出错。从ui方面看,它会有什么不同,我不知道。从文件名中删除.9可以让应用程序正常工作,但不是一个解决办法,因为它可以有效地删除拉伸区域,使其与原始文件相同。是的。这只是暂时解决问题的一种方法。你确定它会奏效吗?因为我的应用程序正在运行