Android инвертировать растровое изображение во время выполнения - PullRequest
3 голосов
/ 10 сентября 2011

Я пытаюсь инвертировать растровое изображение с помощью Paint ColorFilter. Я использовал эту ссылку в качестве ссылки: http://www.mail-archive.com/android-developers@googlegroups.com/msg47520.html

но это не имеет абсолютно никакого эффекта - растровое изображение рисуется нормально, можете ли вы сказать мне, что я делаю неправильно?

Определить массив с плавающей точкой:

    float invert [] = { 
        -1.0f,  0.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  -1.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  0.0f,  -1.0f,  1.0f,  0.0f, 
        1.0f,  1.0f,  1.0f,  1.0f,  0.0f 

};

Настройка Paint в конструкторе

    ColorMatrix cm = new ColorMatrix(invert); 
    invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 

Ссылка в методе Draw ()

c.drawBitmap(Bitmap, null, Screen, invertPaint);

РЕДАКТИРОВАТЬ: мне удалось заставить его работать, имея назначение рисования воператор рисования:

ColorMatrix cm = new ColorMatrix(invert); 
invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 
c.drawBitmap(rm.getBitmap(DefaultKey), null, Screen, invertPaint);

но теперь он рендерит очень медленно (возможно, потому, что он устанавливает сложную матрицу в каждом кадре) ... есть ли причина, по которой он работает, когда используется тот же метод?

РЕДАКТИРОВАТЬ 2: NEVERMIND !!!Lol, проблема заключалась в том, что у меня было два конструктора, и я только настраивал цветовой фильтр в одном из них ... процесс все еще очень загружен процессором и вызывает проблемы с частотой кадров

1 Ответ

4 голосов
/ 04 февраля 2012

Это старая ветка.

Однако: матрица не подходит для инверсии сглаженных изображений с прозрачностью.

Должно быть:

float invert[] =
{
-1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 
0.0f, -1.0f, 0.0f, 1.0f, 1.0f,
0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 
0.0f, 0.0f, 0.0f, 1.0f, 0.0f
};
...