Android на Touch возвращает неправильный цвет

1

У меня странная проблема, связанная с цветом касающейся точки. Я создал изображение (.bmp) и заполнил его краской. Нет градиентов или других цветов. Большую часть времени, когда я касаюсь экрана, я получаю цвет, который я ожидаю, но иногда я получаю немного другой цвет. Мой код кажется достаточно простым:

 final Bitmap bm2 = BitmapFactory.decodeFile(image_overlay);
 if (bm2!=null) {
    overlayimage.setImageBitmap(bm2);
    image.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent mev) {
            Log.d(MY_DEBUG_TAG, "onTouch()");
            DecodeActionDownEvent(v, mev, bm2);
            return false;
        }
    });
 }


 private void DecodeActionDownEvent(View v, MotionEvent ev, Bitmap bm2)
 {
    Log.d(MY_DEBUG_TAG, "DecodeActionDownEvent()");
    xCoord = new Integer((int)ev.getRawX());
    yCoord = new Integer((int)ev.getRawY());
    colorTouched = bm2.getPixel(xCoord, yCoord);
    Log.d(MY_DEBUG_TAG, "The coordinates touched were x: " + xCoord + "; y: " + yCoord);
    Log.d(MY_DEBUG_TAG, "The color touched was (hex) " + Integer.toHexString(colorTouched));
 }

Недавно я получил "промах" и проверил координаты изображения, перемещая инструмент eyedropper вокруг, пока он не оказался в точном месте, а пиксель не отличается от других пикселей в области.

Разве не "безопасно" ожидать, что андроид вернет точный цвет? Если я рисую цель С# ff424542, небезопасно ли предположить, что если я удалю эту цель, я получаю пиксельный цвет # ff424542? В этом случае андроид возвращал # ff4a454a. Прикрепленное изображение - это мой файл "image_overlay". Область, на которую я нацеливаюсь, - темно-серый в середине справа. Как я уже сказал, большую часть времени он отлично работает, но время от времени я записываю промах, даже когда я четко вижу целевую зону. Из моих журналов последние промахи были у x: 360, y: 399 и x: 368, y: 399. Успешные хиты были в x: 363, y: 393 и x: 365, y434.

Изображение 174551

Теги:
image
ontouchevent

1 ответ

0
Лучший ответ

Я предполагаю, что вы используете инструмент eyedropper в приложении на своем ПК, где вы создали изображение? Затем вы предполагаете, что изображение, с которым вы работаете в Android, идентично тому, с которым вы работаете, на вашем ПК. Однако это не безопасное предположение. Каковы свойства исходного растрового изображения, например, разрешение, DPI и т.д. Затем взгляните на Bitmap.decodeFile. Подсказка находится в "декодировании". По умолчанию (отсюда вопрос о свойствах растрового изображения) Android не будет просто читать растровое изображение из вашего спецификатора файла и загружать его в память. Например, и я не уверен, не врываясь в исходный код, возможно, decodeFile сглаживает результирующий растровый рисунок.

Вы должны использовать BitmapFactoryOptions для управления расширением входного растрового изображения:

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

  • 0
    Мне действительно было интересно, происходит ли что-то подобное. Я подозреваю, что вы правы. Спасибо за чаевые!
  • 0
    Добро пожаловать, надеюсь, что это работает для вас. Если это так, пожалуйста, вернитесь и примите ответ. ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню