Как я могу преобразовать short [] в int [] для создания растрового изображения в градациях серого? - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь запустить алгоритм шумоподавления на имеющемся у меня растровом изображении - функция возвращает мне короткое значение [], поэтому я попытался просто привести его к int [], чтобы сгенерировать растровое изображение, и получаю следующее:

http://i.min.us/ickyY6.png, android screenshot with

Мне бы хотелось, чтобы оно было в оттенках серого, а не ... ну ... розовом. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Вместо репликации 8-битной интенсивности в каждом из каналов RGB, вы можете использовать интенсивность в качестве альфа-канала. В этой схеме 0 соответствует прозрачному (цвет фона), а 255 соответствует полностью непрозрачному (черный или любой другой цвет - даже розовый). Идея аналогична предложению Джейсона Лебруна: взять старшие 8 бит каждого значения, сдвинуть на 24 бита влево, затем побитово - ИЛИ с цветом, который вы хотите использовать для полной интенсивности (или без нуля, если вы хотите, чтобы черный представлял полная интенсивность).

0 голосов
/ 31 января 2011

Пиксели растрового изображения кодируются с использованием ARGB_8888, RGB_565, ARGB_4444 или ALPHA_8. Таким образом, короткие значения, которые вы возвращаете, должны соответствовать значениям, которые выглядят слегка розоватыми в одном из этих форматов.

Если вы хотите растровое изображение в градациях серого, вы можете иметь значения только в диапазоне 0-256 (для максимальной составляющей ценного цвета 8 бит, если вы используете ARGB_8888). Итак, вам нужно сопоставить ваше короткое замыкание со значениями в этом диапазоне, а затем скопировать это значение для каждого из компонентов RGB.

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