2017-01-06 26 views
-1

有人可以解釋我的方式setPixel()方法在Android中的工作?我正在嘗試替換位圖上的一些像素。我通過使用getPixel()方法和它們各自的顏色來提取它們,例如。 green = Color.green(a[i][j]);,但我無法將它們設置爲新值,以便在屏幕上顯示處理後的圖像。使用setPixel()方法有問題

編輯:這是發生一些處理的地方。我試着算法轉換爲灰度

for (int i = 0; i < grayWidth; i++) { 
      for (int j = 0; j < grayHeight; j++) { 
       a[i][j] = myImage.getPixel(i, j); 
       red = Color.red(a[i][j]); 
       green = Color.green(a[i][j]); 
       blue = Color.blue(a[i][j]); 
       gray = (red + green + blue)/3; 
       a[i][j] = gray; 
      } 
     } 

,然後替換像素:

for (int m = 0; m < grayHeight; m++) { 
      for (int n = 0; n < grayWidth; n++) { 
       grayScale.setPixel(m, n, a[m][n]); 
      } 
     } 

,最後表現出來的屏幕

imageView.setImageBitmap(grayScale); 

對不起,不擺在首位徹底解釋它/

+0

什麼是錯誤信息?以及您獲取並設置像素的部分代碼。 –

+0

@DavidK處理過的圖片就在那裏。該應用程序處理它,但最終結果不會顯示在屏幕上使用drawBitmap –

+0

您使用try/catch子句來捕獲異常?他們可能不會崩潰你的應用程序,但仍可能發生。另外,給我們一些代碼.. –

回答

0
  1. 爲什麼發佈問題沒有任何代碼?把自己置於我們的位置,如果我們不知道你在做什麼,我們如何能幫助你?你只用英語表達你的問題,在大多數情況下,這不等於編程語言。我們希望看到後者,用英文描述你正在做什麼和發生了什麼。

  2. 根據所提供的信息和Android Dev Page for Bitmap,我可以假設你的位圖圖像可能不可變。這會引起IllegalStateException,但是如果沒有看到你的LogCat/Code,我不能確定是否是這種情況。

  3. 如果BitMap確實是不可變的,那麼你可以試試看converting immutable bitmap to mutable並重試。

+0

我貼了一些代碼,對不對 –

+0

我看到了,但沒有嘗試/ catch子句來確定setPixel是否拋出一些東西。同樣在我的答案中鏈接的Android Dev頁面上,你有一個方法'setPixels()',它接受一個數組,所以你不需要迭代每個像素。 –

+0

好吧,我用setPixels,但我得到以下錯誤:java.lang.IllegalArgumentException:x + width必須是<= bitmap.width()。問題是,在調試應用程序後,變量值與我正在使用的圖像匹配。我的例子是一個20x12px的圖像。如果你檢查我上面發佈的代碼,使用這行'grayScale.setPixels(b,0,grayWidth,0,0,grayWidth,grayHeight);'應該做這個工作,對吧? –