2017-01-06 25 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);'应该做这个工作,对吧? –