Мне нужна функция, которая будет принимать растровое изображение и возвращать растровое изображение с измененным цветом. Это должно быть быстро и просто.
Его цель - изменить цвет, также это png с альфа-символами.
Я посмотрел онлайн, но я не могу использовать холст или что-то внешнее. Функция находится во внешнем объекте (не спрашивайте ..)
Вот то, к чему я так далеко (не работает). Я знаю, что я действительно близок, просто нужно разобраться в цветовой матрице и заставить альфа работать.
public Bitmap changeBitmapColor(Bitmap sourceBitmap, int deg)
{
int width, height;
height = sourceBitmap.getHeight();
width = sourceBitmap.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
//figure out color matricies.
ColorMatrix cm = new ColorMatrix();
//cm.setSaturation(0);
cm.set(new float[]
{
0, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 255, 0, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 1
});
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(sourceBitmap, 0, 0, paint);
return bmpGrayscale;
}
Любая помощь будет отличной!
------- ИСПРАВЛЕНО --------
Я исправил это, изменив цветовую матрицу, теперь растровое изображение будет менять цвет и не отображать альфа-значения.
Во-первых, это матрица:
cm.set(new float[]
{
0, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 140, 0, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 1
});
Второе, что мне пришлось изменить, была эта строка кода:
Bitmap newBM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Удачи читателям!