【发布时间】:2011-05-07 16:39:44
【问题描述】:
我有一个使用 Bitmap.getPixels() 方法从位图派生的 int 数组。此方法使用位图中的像素填充数组。当我遍历该数组时,如何获得每个像素的 xy 坐标?在此先感谢 Mat。
[更新] 谢谢你的数学。我试过下面的代码。我有一个位图,其中我将前 50000 像素更改为白色。我现在想遍历位图并将所有白色像素更改为红色。 atm 只有一条红线穿过位图顶部的白色像素块。你有什么想法吗?非常感谢。
int length = bgr.getWidth()*bgr.getHeight();
int[] pixels = new int[length];
bgr.getPixels(pixels,0,bgr.getWidth(),0,0,bgr.getWidth(),bgr.getHeight());
for (int i=0;i<50000;i++){
// If the bitmap is in ARGB_8888 format
pixels[i] = Color.WHITE;//0xffffffff;
}
bgr.setPixels(pixels,0,bgr.getWidth(),0,0,bgr.getWidth(),bgr.getHeight());
int t = 0;
int y = t / bgr.getWidth();
int x = t - (y * bgr.getWidth());
for( t = 0; t < length; t++){
int pixel = bgr.getPixel(x,y);
if(pixel == Color.WHITE){
bgr.setPixel(x,y,Color.RED);
x++;y++;
}
}
【问题讨论】:
-
通常与
indexXY = (y * bgr.getWidth()) + x)一起给出,其中0 <= y < bgr.getHeight()和0 <= x < bgr.getWith()。您可能希望分别使用 x 和 y 进行迭代以使其更快一些。 -
另外,如果您使用 i、
y = i / bgr.getWidth()、x = i - (y * bgr.getWidth())进行迭代。不过,您可能想在将它们发送到生产环境之前自己检查这些数学。 -
@harism 嗨,谢谢你,如果你不介意看一下,我已经更新了这个问题。
标签: android bitmap pixel-manipulation