2012-03-29 3 views
0

У меня есть небольшая проблема, у меня есть код, который читает все пиксели и берет RGB-цвет пикселя. Но до этого я разрезал изображение на куски, поэтому я также могу рассчитать большие изображения, не превышая памяти. Вот код:Получить x, y позицию определенного пикселя

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); 

      try { 
       decoder_image = BitmapRegionDecoder.newInstance(filePath, 
         false); 


      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       boolean bool_pixel = true; 
       final int width = decoder_image.getWidth(); 
       final int height = decoder_image.getHeight(); 
       // Divide the bitmap into 1100x1100 sized chunks and process it. 
       // This makes sure that the app will not be "overloaded" 
       int wSteps = (int) Math.ceil(width/1100.0); 
       int hSteps = (int) Math.ceil(height/1100.0); 
       Rect rect = new Rect(); 
       for (int h = 0; h < hSteps; h++) { 
        for (int w = 0; w < wSteps; w++) { 
         int w2 = Math.min(width, (w + 1) * 1100); 
         int h2 = Math.min(height, (h + 1) * 1100); 
         rect.set(w * 1100, h * 1100, w2, h2); 
         bitmap_image = decoder_image.decodeRegion(rect, 
           null); 

         try { 
          int bWidth = bitmap_image.getWidth(); 
          int bHeight = bitmap_image.getHeight(); 
          int[] pixels = new int[bWidth * bHeight]; 
          bitmap_image.getPixels(pixels, 0, bWidth, 0, 0, 
            bWidth, bHeight); 
          for (int y = 0; y < bHeight; y++) { 
           for (int x = 0; x < bWidth; x++) { 

            int index = y * bWidth + x; 
            int R = (pixels[index] >> 16) & 0xff; //bitwise shifting 
            int G = (pixels[index] >> 8) & 0xff; 
            int B = pixels[index] & 0xff; 
            total++; 

            if (R == 255){ 
            //Save x,y position          
            } 
            if ((G > (R+2)) && (G > (B+2))) { 
            counter++; 
            } 
           } 
          } 
         } finally { 
          bitmap_image.recycle(); 
         } 
        } 
       } 
      } finally { 
       decoder_image.recycle();      
      } 

Это работает как шарм. Имел некоторую информацию из Интернета, и я переделал это для своего собственного кода.

Но что я хочу сейчас, то есть: когда он обнаруживает «полный» красный пиксель (255), он должен показать позицию x, y этого пикселя.

Я думал, что это было очень легко сделать, но поскольку я разрезал изображение на патроны, я получаю очень странные позиции x, y (что я думаю).

Я объясню, почему я хочу это: на изображении их два красных пикселя, а те 2 должны быть преобразованы в прямоугольник, но я не получаю хорошие позиции x, y.

Так что, чтобы выяснить вопрос: как получить расположение x, y красного пикселя.

Возможно, очень легко, но почему-то я просто не получаю нужное место, даже не закрываю. Я проверю это, открыв изображение в Photoshop и посмотрю, что такое x, y красного пикселя, но мое приложение дает очень странные координаты.

Если вам нужна дополнительная информация или еще что-нибудь, прокомментируйте.

Благодаря уже Bigflow

+0

Итак, вам нужно создать алгоритм, который вычисляет положение пикселя? – Th0rndike

+0

Ответ Джека был верным – Bigflow

ответ

1

Coords должны быть rect.left + х и rect.top + у. Вы уже пробовали это?

+0

Работал отлично, спасибо. – Bigflow

0

x и y - горизонтальное и вертикальное положение пикселя в изображении своими собственными, глобальные координаты зависят от происхождения системы координат, которую вы уважаете, и того, как изображение смещается в соответствии с ним.