Как альфа маскировать цвет
Вопрос
Работая в Android (1.5), у меня есть сто или около того изображений серого в виде байтовых массивов. Я хочу использовать изображения в качестве альфа -масок для рисования сплошных цветов на холсте. Изображения фиксируются, но цвета могут измениться. Я могу создавать растровые объекты для каждой комбинации изображения/цвета, но это кажется ужасно неэффективным. Что было бы хорошим способом подойти к этой проблеме, с точки зрения как памяти, так и скорости? (Мне нужно сделать это много раз для каждого комбинации изображения/цвета.)
Решение
Я думаю, что нашел ответ, который искал:
- Создайте растровую карту argb_8888, где установлен каждый цвет пикселей (серый << 24) | 0xffffff.
- Для каждого цвета создайте новый Porterduffcolorfilter (цвет, porterduff.mode.multiply).
- Чтобы отобрать объект 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.