Вопрос

Работая в Android (1.5), у меня есть сто или около того изображений серого в виде байтовых массивов. Я хочу использовать изображения в качестве альфа -масок для рисования сплошных цветов на холсте. Изображения фиксируются, но цвета могут измениться. Я могу создавать растровые объекты для каждой комбинации изображения/цвета, но это кажется ужасно неэффективным. Что было бы хорошим способом подойти к этой проблеме, с точки зрения как памяти, так и скорости? (Мне нужно сделать это много раз для каждого комбинации изображения/цвета.)

Это было полезно?

Решение

Я думаю, что нашел ответ, который искал:

  1. Создайте растровую карту argb_8888, где установлен каждый цвет пикселей (серый << 24) | 0xffffff.
  2. Для каждого цвета создайте новый Porterduffcolorfilter (цвет, porterduff.mode.multiply).
  3. Чтобы отобрать объект Paint и вызовать SetColorFilter () с фильтром, соответствующим использованию цвета. Затем вызовите Canvas.drawbitmap, используя растровые карты и рисовать объекты.

Для одного цвета, это, вероятно, не так быстро, как создание точно того растрового карты, которое я хочу, и рисовать без объекта краски, но это гораздо более эффективно, чем растровое изображение для каждого комбинации изображения/цвета.

Другие советы

Float Contrast = 100/180.f; Float Scale = Contrast + 1.f;

        cm.set(new float[] {
               scale, 0, 0, 0, 0,//Red
               0, 1.5f, 0, 0, 0,//Green
               0, 0, 1.5f, 0, 0,//Blue
               0, 0, 0, 1, 0 });//alpha
        bmpGrayscale = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);

        Canvas c = new Canvas(bmpGrayscale);
        Paint paint = new Paint();

        ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
        paint.setColorFilter(f);
        c.drawBitmap(bitmap, 0, 0, paint);
        /*BitmapDrawable bmd = new BitmapDrawable(bmpGrayscale);
        photo_view.setBackgroundDrawable(bmd);*/

        photo_view.setImageBitmap(bmpGrayscale);

я хотел бы использовать drawImage Чтобы полюбить изображение на холст, getImageData() Чтобы получить доступ к пикселям, а затем пройти через .data Из данных изображения устанавливает значения RGB для каждого пикселя на ваш постоянный и четвертое (альфа) значение на то, что вы получили от изображения. Затем вы можете уложить этот полупрозрачный холст на все, что вам нужно.

Редактировать: Я положил Рабочий пример этого на моем сайте. Работает только на Chrome/Safari.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top