Алгоритм преобразования из Грея -> RGB обрисован в общих чертах (в моем любимом) OpenCV документы:
RGB-> Серый - взвешенная сумма R, G, B.Gray-> RGB является прямой копией значений Gray = R, G, B (без масштабирования).
Вы можете просто использовать int [] и выполнить двойной цикл for для копирования всех значений серого вRGB массив, вы можете затем использовать Canvas.drawBitmap (int [], ширина, смещение, высота, смещение, RGB) для рисования на холсте.
//color[], gray[]
for(int y = 0; y < getHeight(); y++){
for(int x = 0; x < getWidth(); x++){
color[x+y*w] = 0xff << 24 | gray[x+y*w] << 16 | gray[x+y*w] << 8 | gray[x+y*w];
}
}
// make sure to set hasAlpha to be false, or set the 0xff value to be alpha
//canvas.drawBitmap(color, ...)
Даже если использоватьColorMatrix требует, чтобы вам пришлось копировать биты GrayScale в значение [rgba].ColorMatrix действительно для масштабирования / преобразования из ARGB в ARGB.