android - Android的Bitmap类的getPixels()的使用及使用方法

标签 android bitmap pixel

我正在尝试在 Android 中进行一些图像处理。 我需要获取位图的一大块像素信息。 所以我尝试使用 Bitmap 类方法之一 getPixels()。 但是,我似乎没有正确使用它,或者我误解了该方法行为的唯一目的。

例如,我正在执行以下操作,以便从任意位置(位图坐标)x、y 获取位图的 10 x 10 区域的像素信息。

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int[] pixels = new int[100];
bitmap.getPixels(pixels, 0, bitmap.getWidth(), x, y, 10, 10);

我收到 ArrayIndexOutOfBoundsException。 我一直在谷歌搜索,看看我做错了什么,但我一无所知。 大多数关于getPixels()使用的例子或问题通常是针对提取整个图像的像素信息的情况。因此int数组的大小通常为bitmap.getWidth()*bitmap.getHeight(),x、y值为0、0,width、height为位图的宽高。

Bitmap 的 getPixels() 不是为我的使用目的而设计的吗(获取位图子区域的一大块像素信息)?还是我使用不当?有没有其他方法可以做到这一点,也许使用不同的类?

如果有人对此有话要说,我将不胜感激。谢谢。

最佳答案

getPixels() 返回源位图的完整 int[] 数组,因此必须使用与源位图的高 x 宽相同的长度进行初始化。

像这样使用,bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, 10, 10); 实际上是从位图中抓取所需的像素,并填充数组的其余部分为 0。因此,对于 100 x 10 位图的 10 x 10 子集,从 0,0 开始,前 100 个值将是所需的 int 值,其余将为 0。

您总是可以尝试使用 Bitmap.createBitmap() 创建您的子集位图,然后在您的新位图上使用 getPixels() 来获取完整的数组。

关于android - Android的Bitmap类的getPixels()的使用及使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13444185/

相关文章:

coordinates - 获取谷歌地图标记的像素坐标

android - 从android发送数据到jsp

android - 查看哪些 map 图 block 在 Google Maps for Android v2 中可见

c# - 从几个重叠的 png 中创建一个 jpeg

安卓屏幕尺寸兼容性 : Bitmap?

c++ - 是否可以保存当前视口(viewport),然后在下一个绘制周期中在 OpenGL 和 C++ 中重新绘制保存的视口(viewport)?

objective-c - 更改UIImage中的颜色

android - 在 Android 中显示表格的最有效方法是什么

android - FDT5 和端口 7935

c - SDL2 如何渲染原始格式的像素?