2017-01-06 6 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. Если битмап действительно неизменен, вы можете попробовать и посмотреть converting immutable bitmap to mutable и повторите попытку.

+0

Я разместил код, вы правы, извините –

+0

Я видел, но нет попытки/catch, чтобы определить, бросает ли setPixel что-то. Также на странице Android Dev, которую я связал в своем ответе, у вас есть метод 'setPixels()', который принимает массив, поэтому вам не нужно перебирать каждый пиксель. –

+0

Хорошо, я использовал setPixels, но я получаю следующую ошибку: java.lang.IllegalArgumentException: x + width должно быть <= bitmap.width(). Проблема в том, что после отладки приложения значения переменных соответствуют изображению, которое я использую. Мой пример - 20х12 пикселей. Если вы проверите код, который я разместил выше, используя эту строку 'grayScale.setPixels (b, 0, grayWidth, 0, 0, grayWidth, grayHeight);' должен выполнить задание, правильно? –