如何在Android上访问位图图像的像素?

时间:2010-11-20 15:04:47

标签: android image pixel

简而言之,我无法访问位图图像的所有像素。

我使用了一个intent来触发本机Camera应用程序并将Bitmap图像返回给我的应用程序活动。数据绝对是一个位图对象,我能够显示,获取高度/宽度等,并使用getPixel()访问一些像素。但是当我使用getHeight()和getWidth()的值时,我得到一个超出边界的数组错误。通过跟踪和错误我发现我只能访问图像的减少数量的像素,例如,一个图像返回高度和宽度值420,380,我也可以访问200,100。然后我做了一些图像处理并在原始图像上使用了setPixel()。当我显示图像时,它会显示200,100处理像素,其余处于正常状态,因此像素显然在那里,可由Android访问,但不能由我访问。我必须和其他有图像问题的人交谈。

有没有人对此有更多了解,原因?或解决方法?

非常感谢提前。

似乎没有办法解决这个问题,是否有人认为使用NDK直接在内存中访问图像会更好/可能?

2 个答案:

答案 0 :(得分:1)

您将无法访问任何图像中的(getWidth(),getHeight())像素,因为像其他所有图像一样,它们都是0索引的。有效像素范围是(0到getWidth() - 1,0到getHeight() - 1),因此最底部的像素是由b.getPixel(b.getWidth() - 1,b.getHeight() - 获得的 - 1)。

答案 1 :(得分:1)

在Android论坛上找到了Albert Pucciani的回答。我现在创建一个int buffer并将像素复制到它,然后使用get()put()来提取像素。使用get()put()代替get/setPixel()类中的Bitmap也更快。现在需要测试是否确实将所有像素都返回到所有图像的缓冲区。

经过更多测试后,我发现这只是一个内存问题,因为为每个进程分配的数量包括所有位图。