Android:将ColorMatrixColorFilter应用于绘制对象时出现异常,但仅适用于某些位图

Android:将ColorMatrixColorFilter应用于绘制对象时出现异常,但仅适用于某些位图,android,background,bitmap,runtimeexception,colorfilter,Android,Background,Bitmap,Runtimeexception,Colorfilter,我是一个Android编程的初学者,但我已经花了很多时间来研究这个问题,所以希望有人知道到底发生了什么。我的应用程序有一堆东西对象,每个对象都有一个位图,每个对象都会以某种方式更改位图(更改颜色、大小等)。我用MS Paint(另存为.png文件)制作了一些“测试”位图,这一切都很好。然而,当我用GIMP制作的更好的图片替换它们时,应用程序开始崩溃 最终我发现,只有在GIMP中选中“保存背景色”保存.png图像时,应用程序才会崩溃。我需要这个,因为其中一些图片需要部分透明,以便可以覆盖。然而:疯

我是一个Android编程的初学者,但我已经花了很多时间来研究这个问题,所以希望有人知道到底发生了什么。我的应用程序有一堆东西对象,每个对象都有一个位图,每个对象都会以某种方式更改位图(更改颜色、大小等)。我用MS Paint(另存为.png文件)制作了一些“测试”位图,这一切都很好。然而,当我用GIMP制作的更好的图片替换它们时,应用程序开始崩溃

最终我发现,只有在GIMP中选中“保存背景色”保存.png图像时,应用程序才会崩溃。我需要这个,因为其中一些图片需要部分透明,以便可以覆盖。然而:疯狂的是,当我尝试覆盖图像或创建图像时,它并没有崩溃,而是当我将ColorMatrixColorFilter应用到绘制对象时崩溃

我不明白怎么会这样。它永远不足以将绘制对象实际应用于任何对象,所以为什么一个图像文件可以工作,而另一个则不行?崩溃是ActivityThread.performLauncActivity中的一个运行时异常,我无法找到更多关于它的信息

这里有一些伪代码,我在做什么,它在哪里崩溃

问题: 1) 为什么会崩溃? 2) 如果我想加载透明图像并应用颜色过滤器,将它们相互叠加以创建新位图等,我应该做些什么?只要我的所有图像都没有背景,所有这些都可以正常工作

public class ThingHolder {

Thing[] things;

public ThingHolder() {
    things = new Thing[3];
    things[0] = new Thing();  // The first one works fine
    things[1] = new Thing();  // The second fails, see below
    ...
    // Note: It never gets far enough to draw the bitmap 
      // to a Canvas, that occurs much later
    ...
    canvas.drawBitmap(things[0].bmp, null, rect, things[0].paint);
    canvas.drawBitmap(things[1].bmp, null, rect, things[1].paint);
    }
}

public class Thing {

Bitmap bmp;
Paint paint;

public Thing() {
    bmp = getBmp(1);  // this always returns resource file circle.png
    paint = new Paint();
    paint.setColorFilter(new ColorMatrixColorFilter(redMatrix()));
    // RuntimeException occurs here if circle.png has a background color
// But it works fine if circle.png was saved in MS Paint, or in 
      // Gimp without the background color option checked
}

private float[] redMatrix() {
    float[] matrix = { 
            1, 0, 0, 0, 0, //red
            0, 0, 0, 0, 0, //green
            0, 0, 0, 0, 0, //blue
            0, 0, 0, 1, 0  //alpha
        };
    return matrix;
}
}
编辑1:这是跟踪,以防有用: DalvikVM[localhost:8611]
线程[main](挂起(异常运行时异常))
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord,Intent)行:2663
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord,Intent)行:2679
ActivityThread.access$2300(ActivityThread,ActivityThread$ActivityRecord,Intent)行:125 ActivityThread$H.handleMessage(消息)行:2033
ActivityThread$H(处理程序)。dispatchMessage(消息)行:99 Looper.loop()行:123 ActivityThread.main(字符串[])行:4627
调用(对象,对象[],类,类[],类,整数,布尔值)行:不可用[本机方法]
调用(对象,对象…)行:521
ZygoteInit$MethodAndArgsCaller.run()行:868
颧骨单位。主(字符串[])行:626 NativeStart.main(字符串[])行:不可用[本机方法]

编辑2:这是使用2.2目标(特别是在VirtualBox中运行的android-x86-2.2-eeepc)实现的。在针对3.2目标运行时,其他地方的位图处理似乎仍然存在一些问题,但它不再抛出RuntimeException。所以看起来这可能只是一个bug