getPixel在Android中返回负值

getPixel在Android中返回负值,android,image,android-image,Android,Image,Android Image,朋友们,我刚接触安卓系统,我正在做一个项目,我想做一些图像处理。当我尝试使用 int pixels=myImageBitmap.getPixel(x,y); 我得到的只是x中的一些负值 此外,我试图设置一些值的像素使用 result.setPixel(x,y,pixels); 我的应用程序突然停止,之后,我的日志猫看起来像 03-06 19:52:01.731: W/dalvikvm(29185): threadid=1: thread exiting with uncaught excep

朋友们,我刚接触安卓系统,我正在做一个项目,我想做一些图像处理。当我尝试使用

int pixels=myImageBitmap.getPixel(x,y);
我得到的只是x中的一些负值 此外,我试图设置一些值的像素使用

result.setPixel(x,y,pixels);
我的应用程序突然停止,之后,我的日志猫看起来像

03-06 19:52:01.731: W/dalvikvm(29185): threadid=1: thread exiting with uncaught exception (group=0x41036378)
03-06 19:52:01.731: E/AndroidRuntime(29185): FATAL EXCEPTION: main
03-06 19:52:01.731: E/AndroidRuntime(29185): java.lang.IllegalStateException
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.graphics.Bitmap.setPixel(Bitmap.java:1045)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at com.example.testpro.EncodeActivity$3.onClick(EncodeActivity.java:90)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.view.View.performClick(View.java:4147)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.view.View$PerformClick.run(View.java:17161)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.os.Handler.handleCallback(Handler.java:615)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.os.Looper.loop(Looper.java:213)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at android.app.ActivityThread.main(ActivityThread.java:4787)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at java.lang.reflect.Method.invokeNative(Native Method)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at java.lang.reflect.Method.invoke(Method.java:511)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
03-06 19:52:01.731: E/AndroidRuntime(29185):    at dalvik.system.NativeStart.main(Native Method)
有人请帮我摆脱这个错误。请提前感谢

java.lang.IllegalStateException位于 android.graphics.Bitmap.setPixel(Bitmap.java:1045)

如果您使用的
位图
是不可变的
,则会引发此异常。

原因:

result.setPixel(x,y); 
在这里,您试图更改位图的像素。由于位图是不可变的,因此它是不允许的,因此会引发上述异常

解决方案: 制作位图的可变副本,并使用它

myImageBitmap = myImageBitmap.copy(Bitmap.Config.ARGB_8888, true);
有关更多信息,请参阅

更新:

result.setPixel(x,y); 
当我比较两个位图图像的像素值时,第一个 对于拷贝,我得到的是同一像素的不同值,为什么

尝试根据位图的尺寸创建新位图, 将新位图的配置设置为指定的配置,然后复制 将位图的像素转换为新位图。如果转换不正确 支持,或者分配器失败,则返回NULL

方法中指定的位图配置()描述了像素的存储方式。这会影响质量(颜色深度)以及显示透明/半透明颜色的能力

如果你看一下的文档,它会返回一个整数,它是一个颜色值

因此,如果用于原始图像和复制图像的位图配置不同,则相同像素的值也不同


可能导致像素值差异的另一个原因是像素的预乘/非预乘

你应该发布一些代码来检查…很可能,你的x和y超出了范围。我想,在这种情况下,异常应该是IllegalArgumentException而不是IllegalStateException。我尝试过,它工作得很好,非常感谢。而且,当我比较两幅位图图像的像素值时,第一幅和第二幅,我得到的是同一像素的不同值,为什么?我建议你接受它作为答案。所以这对未来的用户很有用