Android:将ColorMatrixColorFilter应用于绘制对象时出现异常,但仅适用于某些位图
我是一个Android编程的初学者,但我已经花了很多时间来研究这个问题,所以希望有人知道到底发生了什么。我的应用程序有一堆东西对象,每个对象都有一个位图,每个对象都会以某种方式更改位图(更改颜色、大小等)。我用MS Paint(另存为.png文件)制作了一些“测试”位图,这一切都很好。然而,当我用GIMP制作的更好的图片替换它们时,应用程序开始崩溃 最终我发现,只有在GIMP中选中“保存背景色”保存.png图像时,应用程序才会崩溃。我需要这个,因为其中一些图片需要部分透明,以便可以覆盖。然而:疯狂的是,当我尝试覆盖图像或创建图像时,它并没有崩溃,而是当我将ColorMatrixColorFilter应用到绘制对象时崩溃 我不明白怎么会这样。它永远不足以将绘制对象实际应用于任何对象,所以为什么一个图像文件可以工作,而另一个则不行?崩溃是ActivityThread.performLauncActivity中的一个运行时异常,我无法找到更多关于它的信息 这里有一些伪代码,我在做什么,它在哪里崩溃 问题: 1) 为什么会崩溃? 2) 如果我想加载透明图像并应用颜色过滤器,将它们相互叠加以创建新位图等,我应该做些什么?只要我的所有图像都没有背景,所有这些都可以正常工作Android:将ColorMatrixColorFilter应用于绘制对象时出现异常,但仅适用于某些位图,android,background,bitmap,runtimeexception,colorfilter,Android,Background,Bitmap,Runtimeexception,Colorfilter,我是一个Android编程的初学者,但我已经花了很多时间来研究这个问题,所以希望有人知道到底发生了什么。我的应用程序有一堆东西对象,每个对象都有一个位图,每个对象都会以某种方式更改位图(更改颜色、大小等)。我用MS Paint(另存为.png文件)制作了一些“测试”位图,这一切都很好。然而,当我用GIMP制作的更好的图片替换它们时,应用程序开始崩溃 最终我发现,只有在GIMP中选中“保存背景色”保存.png图像时,应用程序才会崩溃。我需要这个,因为其中一些图片需要部分透明,以便可以覆盖。然而:疯
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