58

每当我尝试将 9-patch 图像添加到\drawable项目中的文件夹时,都会收到相同的错误:

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 补丁图像都发生了同样的情况。有什么问题?

4

14 回答 14

32

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

于 2015-08-03T06:21:17.647 回答
23

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

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

于 2012-08-24T09:20:36.137 回答
11

资源编译器会去除 9 个补丁的 1 个像素边界(并且可能会以更有效的方式将从它们获得的信息存储在 .9.png 文件之外)。如果您从 .apk 中找到了这些 .9.png 文件,则需要手动添加边框。

于 2010-11-25T19:53:20.137 回答
8

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

您需要做的是,从图像文件名中删除 .9,然后在 draw9patch 工具(位于 /sdk/tools 目录中)中打开它,现在,单击右上角的 Show Bad Patches 按钮。

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

将文件另存为 .9.png 并将其放回项目的 res 文件夹中。然后,Android Studio 应该可以毫无问题地构建您的项目,以获得 9 个补丁图像。

于 2014-11-21T15:42:43.163 回答
5

就我而言,我错误地将黑色边框延伸到左上角。确保角落是透明的。

于 2013-11-18T05:02:21.893 回答
4

现在 Android 构建工具中有两个 PNG 处理器,AAPT 和一个 Java 处理器。两者都检查格式错误的 9 个补丁图像。

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

所以这里有一个替换 AAPT 的简单脚本:

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

当调用压缩 9 个补丁图像时,它会简单地复制文件,否则,它将使用 @ARGV 启动真正的 AAPT。

于 2014-09-17T09:41:10.993 回答
2

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

于 2015-12-30T13:51:23.153 回答
1

仅作记录:对我来说,事实证明这个错误来自右侧站点和底部的黑色边框线。所以我在每一边(顶部、右侧、底部和左侧)都有一个黑色边框。删除多余的右边和底线就像一个魅力。

于 2013-11-15T12:01:14.533 回答
1

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

于 2014-12-20T11:20:46.010 回答
1

您的 9-patch 可能是错误的。

也许您将 9 个补丁的 1 个像素边界剥离,并且从中获得的信息不可用。尝试为文本添加底线和右线。我认为这将有助于解决您的问题。

于 2014-10-14T13:22:00.660 回答
0

When the error comes up it opens the image in android studio as well. All I did to fix this was extend any of the patch borders by a single drawn pixel. I re-ran and it worked. Not sure why, but I repeat tested this with several images.

于 2014-09-04T21:00:52.670 回答
0

我已经通过更改 Android Studio 中的拉伸范围来解决它。

于 2016-10-12T01:57:56.860 回答
0

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

这是我的问题的唯一解决方案。

于 2017-06-08T06:32:10.350 回答
0

当我们对任何图像进行九次修补时,它会在其边界上创建一条黑线。该边框应该是透明的或完全实心的。如果不是,就会出现这个错误。

所以解决办法就是把宽高增加两个像素。(在 Photoshop 中增加画布的大小,而不是图像。)

于 2015-10-05T10:02:03.253 回答