Преобразование изображения в градациях серого в цвет - PullRequest
2 голосов
/ 20 апреля 2011

Каков наилучший способ преобразования изображения в градациях серого (1 пиксель / байт) в цветное растровое изображение - с использованием цветового пространства (RGB в форме байтового массива)?

Я думаю, что это будет использовать ColorMatrix класс, но я не могу понять, как использовать его для достижения этого.

1 Ответ

5 голосов
/ 20 апреля 2011

Алгоритм преобразования из Грея -> 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...