Получение значения цвета пикселя точки в представлении Android, включающей растровый холст - PullRequest
15 голосов
/ 08 июня 2011

Я пытаюсь найти лучший способ получить значение цвета пикселя в заданной точке на Просмотр . Я пишу в View тремя способами:

  1. Я установил фоновое изображение с помощью View.setBackgroundDrawable (...) .

  2. Я пишу текст, рисую линии и т. Д., Используя Canvas.drawText (...) , Canvas.drawLine (...) и т. Д., на холст с поддержкой растровых изображений .

  3. Я рисую дочерние объекты (спрайты), записывая их в Canvas, передаваемый в метод onDraw (Canvas Canvas) .

Вот метод onDraw () из моего класса, который расширяет View:

   @Override
   public void onDraw(Canvas canvas) {
      // 1. Redraw the background image.
      super.onDraw(canvas);
      // 2. Redraw any text, lines, etc.
      canvas.drawBitmap(bitmap, 0, 0, null);
      // 3. Redraw the sprites.
      for (Sprite sprite : sprites) {
        sprite.onDraw(canvas);
      }
    }

Каков наилучший способ получить значение цвета пикселя, учитывающее все эти источники?

1 Ответ

29 голосов
/ 08 июня 2011

Как насчет загрузки вида в растровое изображение (в какой-то момент после того, как все ваши рисунки / спрайты и т. Д. Сделаны), а затем получить цвет пикселя из растрового изображения?

public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

затем использовать getPixel (x, y) для результата?

http://developer.android.com/reference/android/graphics/Bitmap.html#getPixel%28int,%20int%29

...