Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Android, как получить цвет пикселя из Canvas?

Автор вопроса: Dmytro ZarezenkoОтветов: 1

У меня есть такой код:

// ...

public class MyImageView extends ImageView

    public MyImageView(Context context, String value /* some other params */) {
        super(context);

        // some predefines
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // some preparations
        try {
            // here I call third party lib like:
            someObj.draw(canvas);

            // HERE I WANT TO CHANGE COLOR OF SOME PIXELS ACCORDING TO THEIR CURRENT COLOR
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

Вместо комментария букв UPCASE я хочу изменить цвет некоторых пикселей на холсте в соответствии с их текущим цветом после рисования сторонней библиотеки. Я могу использовать метод canvas.drawPoint(x, y, paint) для установки цвета пикселей, но как я могу получить цвет некоторого пикселя с помощью (x,y)?

  • Я не могу сделать так, как в этой статье, потому что я выполняю все операции в методе reloaded onDraw(). Dmytro Zarezenko 29.09.2012

androidandroid-canvascolorsdrawpixels

Ответы

Ответ 1 · рейтинг 1 · seesharper

У меня может быть что-то здесь (непроверенное):

public static Bitmap getBitmap(Canvas canvas) {
    // mBitmap is a private value inside Canvas.
    // time for some dirty reflection:
    try {
        java.lang.reflect.Field field = Canvas.class.getDeclaredField("mBitmap");
        field.setAccessible(true);
        return (Bitmap)field.get(canvas);
    }
    catch (Throwable t) {
        return null;
    }
}

Затем вы можете получить доступ к пикселям следующим образом:

Bitmap map = getBitmap(canvas);
if (map != null) {
    int rgb = map.getPixel(100,100);
    int red = android.graphics.Color.red(rgb);
    ...
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы