2012-03-29 31 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つの赤色ピクセルであり、2つは矩形に変換する必要がありますが、私は良いx、yポジションを得ません。

質問をクリアするには、どうすれば赤いピクセルのx、y位置を取得できますか?

多分簡単ですが、どういうわけか私はちょうど良い場所を取得していない、近くにも。私はPhotoshopで画像を開いて、これをチェックし、赤いピクセルのx、yが何であるかを見ていますが、私のアプリは非常に奇妙な座標を示しています。

さらに詳しい情報が必要な場合は、コメントしてください。

おかげで、すでに、

Bigflow
+0

このように、ピクセル位置を計算するアルゴリズムを作成する必要がありますか? – Th0rndike

+0

ジャックの答えは正しい – Bigflow

答えて

1

COORDS + xとrect.top + Y rect.leftされるべきです。これはすでに試しましたか?

+0

完璧に働いた、ありがとう。 – Bigflow

0

xとyは、画像内の水平、垂直のピクセル位置です。それは、自分の尊重している座標系の原点とそれに従って画像がどのようにシフトされるかによって決まります。

関連する問題