gpt4 book ai didi

android - 从位图中获取单列像素?

转载 作者:行者123 更新时间:2023-11-29 00:22:16 29 4
gpt4 key购买 nike

我正在尝试分析位图中像素的 RGB 值。我可以使用以下代码一次扫描一行位图...

private void analyseImage() {
int w = imageBitmap.getWidth();
int h = imageBitmap.getHeight();
int[] pixels = new int[w];

for (int vPos = 0; vPos < h; vPos++) {
imageBitmap.getPixels(pixels, 0, w, 0, vPos, w, 1);
for (int hPos = 0; hPos < w; hPos++) {
if ((pixels[hPos] & 0x00FFFFFF) != 0x00FFFFFF) {
Log.d(TAG, "analyseImage - found object pixel: " + pixels[hPos] + ", " + hPos + ", " + vPos);
}
}
}

这非常有效,可以识别除纯白色(我的背景色)以外的任何其他颜色的像素。

理想情况下,我想做的是每次获取一列像素而不是一行,但我认为我误解了 getPixels(...)< 的 stride 参数 和下面的 for 循环抛出一个 ArrayIndexOutOfBoundsException

int[] pixels = new int[h];

for (int hPos = 0; hPos < w; hPos++) {
imageBitmap.getPixels(pixels, 0, w, hPos, 0, 1, h);
for (int vPos = 0; vPos < h; vPos++) {
if ((pixels[vPos] & 0x00FFFFFF) != 0x00FFFFFF) {
Log.d(TAG, "analyseImage - found object pixel: " + pixels[hPos] + ", " + hPos + ", " + vPos);
}
}
}

正如我所说,我显然误解了 stride 的工作原理,但我假设我可以使用上面的方法一次阅读一列。是否有一种简单的方法来一次读取一列,或者我是否必须通过重复调用 getPixel(int x, int y) 来构建我自己的列数组来手动完成?

最佳答案

您确实误解了 stride,stride 是 RETURNED 整数数组的跳过参数。您想要的是步幅为 1,因为您希望返回的值数组中基本上没有跳过。您将越过新分配数组的末尾,因为您使用的是原始图像宽度的步幅。从下面移动,然后告诉我结果。

来自:

imageBitmap.getPixels(pixels, 0, w, hPos, 0, 1, h);

收件人:

imageBitmap.getPixels(pixels, 0, 1, hPos, 0, 1, h);

来自这个函数定义的异常部分:

throw :*IllegalArgumentException* 如果 x、y、宽度、高度超出位图的边界,或者如果 abs(stride) < width。

在你的例子中,宽度实际上只有 1。

关于android - 从位图中获取单列像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314481/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com