2010-11-20 45 views
2

总之,我无法访问位图图像的所有像素。如何访问Android上的位图图像的像素?

我已经使用了一个意图来启动原生的相机应用程序,并返回一个位图图像到我的应用程序活动。数据绝对是一个位图对象,我可以显示,获取高度/宽度等,并使用getPixel()访问一些像素。但是,当我使用getHeight()和getWidth()的值时,我得到一个数组越界的错误。通过跟踪和错误我发现我只能访问图像像素数量减少,例如一个图像返回的高度和宽度值为420,380,我也可以访问200,100。然后我做一些图像处理,并在原始图像上使用setPixel()。当我显示图像时,它显示的是200,100,处理像素,其余部分正常,因此像素显然存在,可以通过android访问,但不能通过我访问。我必须和其他也有这个问题的人交谈。

有没有人知道更多关于此事的原因?或工作?

非常感谢提前。

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

回答

1

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

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

1

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

+0

感谢您的答复,是的,我意识到0索引,问题是我不能访问好一半以上的像素。基本上我有一些嵌套的for循环(int y = 0; y 2010-11-20 16:06:19