2014-04-17 79 views
0

我有一個jpg圖像。首先,我想將其轉換爲位圖,以便我可以從我的照片中獲取所有像素。 然後,我想保持像素成爲一個矩陣的行和列的二維數組。 然後,我想要搜索行或列或兩者以匹配一種顏色。這意味着我想要查找該2D矩陣的某一行(或任何我想要的列)是否包含紅色(例如)。我想是這樣的:在android中使用位圖圖像

  Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.laser); 
     bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);   

     int[] pixels = new int[bmp.getHeight()*bmp.getWidth()]; 
     bmp.getPixels(pixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight()); 

      for(int i =0; i<pixels.length;i++){  
      if(pixels[i]==0xffff0000) 
       Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)",     Toast.LENGTH_LONG).show(); 
       } 

在這裏,我把像素到一個數組(1D),並檢查是否有紅色的存在,或者不在該數組。 但它沒有找到,雖然我的照片中存在紅色。 這裏可能是陣列不能獲取像素。 但這不是我想要的。我想上面提到的。我怎樣才能達到我的目標?

+1

OpenCV?)........ –

+0

我想要它在Android手機 – DarkenShooter

+0

OpenCV已移植到Android。您可以在Google Play商店中安裝名爲OpenCV Manager的應用程序庫。 OpenCV的Java接口可以打包在.apklib中,以便IDE可以找到它們。 –

回答

0

如果您有位圖對象,則可以使用Bitmap::getPixels方法獲取像素。 例如,在這裏我得到的圖像的第一列:

// byte[] data2 contains image binary date from the network 
    Bitmap bitmap = BitmapFactory.decodeByteArray(data2, 0, data2.length); 

    int[] pixels = new int[bitmap.getHeight()]; 

    int offset = 0; 
    int stride = 1; 
    int x = 0; 
    int y = 0; 
    int width = 1; 
    int height = bitmap.getHeight(); 

    bitmap.getPixels(pixels, offset, stride, x, y, width, height); 

每個像素只是一個Color對象,所以你可以檢查它的RGB值。

+0

你能告訴我如何比較我想要的RGB值與行RGB值? @pelotasplus – DarkenShooter

+0

遍歷行/列並檢查值?假設你想匹配只有紅色像素的列/行,那麼你的代碼可能看起來像這樣: 'for(int i = 0; i pelotasplus

+0

是我提到的方法來將正常圖像轉換爲位圖正確? @pelotasplus – DarkenShooter