Как найти координату XY пикселя в массиве пикселей из Android-растрового изображения - PullRequest
1 голос
/ 07 мая 2011

У меня есть массив int, полученный из растрового изображения с использованием метода Bitmap.getPixels ().Этот метод заполняет массив пикселями из растрового изображения.Как я могу получить координату XY каждого пикселя, когда я перебираю этот массив?заранее спасибо Мат.

[обновление] Спасибо за математику.Я попробовал следующий код.У меня есть растровое изображение, где я изменил первые 50000 пикселей на белый.Теперь я хочу перебрать растровое изображение и изменить все белые пиксели на красные.атм есть только одна красная линия через блок белых пикселей в верхней части растрового изображения.у тебя есть идеи?Большое спасибо.

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++;
                      }
                  }

1 Ответ

6 голосов
/ 07 мая 2011

Вот пример кода, который, возможно, делает то, что вы описываете. Как я понял твою цель хотя бы;

int length = bgr.getWidth()*bgr.getHeight();
int[] pixels = new int[length];

bgr.getPixels(pixels,0,bgr.getWidth(),0,0,bgr.getWidth(),bgr.getHeight());

// Change first 50000 pixels to white. You most definitely wanted
// to check i < length too, but leaving it as-is.
for (int i=0;i<50000;i++){
    pixels[i] = Color.WHITE;
}

// I'm a bit confused why this is here as you have pixels[] to do
// modification on. And it would be a bit more efficient way to do all of
// these changes on pixels array before setting them back to bgr.
// But taken this is an experiment with Bitmaps (or homework, hopefully not ;)
// rather good idea actually.
bgr.setPixels(pixels, 0, bgr.getWidth(), 0, 0, bgr.getWidth(), bgr.getHeight());

for (int i=0; i < length; ++i) {
    int y = i / bgr.getWidth();
    int x = i - (y * bgr.getWidth());
    int pixel = bgr.getPixel(x, y);
    if(pixel == Color.WHITE){
        bgr.setPixel(x ,y , Color.RED);
    }
}
...