5-битный RGB (0, 31, 0) до 16-битного RGB (0, 255, 0)

Итак, я начал программировать DS и заметил, что для рисования пикселя цвет должен быть RGB (0, 31, 0). Есть ли способ изменить это на что-то вроде RGB (0, 255, 0)?


person NDSgrammer    schedule 06.03.2011    source источник
comment
stackoverflow.com/questions/2442576/   -  person Josh Lee    schedule 06.03.2011


Ответы (2)


5 bit rgb : 31 = 8 bit rgb : 255

so 8 bit rgb = (5 bit rgb * 255 / 31)

Пример:

5 bit RGB = 12,3,21

8 bit R = (12 * 255) / 31 = 99
      G = (3 * 255) / 31  = 25
      B = (21 * 255) / 31 = 172

PS: Я думаю, вы имеете в виду «от 5 бит RGB до 8 бит RGB» в своем заголовке.

person BlackBear    schedule 06.03.2011
comment
Не забывайте, что, поскольку ноль является приемлемым значением, существует 256 и 32 дискретных уровня, поэтому вам следует умножать и делить на 256 и 32, а не 255 и 31. Вы можете думать о преобразовании как о включении только пяти наиболее значимых биты. - person Dave; 06.03.2011
comment
@ Дэйв: Я не понимаю. (0 * 255) / 31 = 0 (правильно) и (31 * 255) / 31 = 255 (тоже правильно) - person BlackBear; 06.03.2011
comment
Если подумать, ваш способ лучше всего подходит для отображения цветов, так что +1 для вас и eznme. Моя теория включает 32 и 256 дискретных уровней (которые действительно существуют), поэтому каждый уровень будет ровно 8 от следующего. Но это означает, что моя теория потеряет черноту 0, поэтому это не будет хорошим решением. - person Dave; 06.03.2011

Если у вас есть зеленый цвет g с диапазоном 0-255, вы можете преобразовать его в диапазон NintendoDS 0-31 с помощью g*31/255. Если вы спрашиваете нас, можете ли вы действительно сделать что-то, чтобы ваша NintendoDS отображала диапазон от 0 до 255 для каждого канала, ответ будет отрицательным, но вы можете использовать дизеринг (поисковая система это).

person Bernd Elkemann    schedule 06.03.2011
comment
зачем тебе пол? они целые числа - person steabert; 06.03.2011
comment
Не забывайте, что, поскольку ноль является приемлемым значением, существует 256 и 32 дискретных уровня, поэтому вам следует умножать и делить на 32 и 256, а не на 31 и 255. Вы можете думать о преобразовании как о включении только пяти наиболее значимых биты. - person Dave; 06.03.2011
comment
Хм, на самом деле причина, по которой я делаю * 31/255, заключается в том, что я делю на предыдущее максимальное значение и умножаю на новое максимальное значение; это должно быть правильно. (в обратном порядке, чтобы целочисленная арифметика оставалась более точной). - person Bernd Elkemann; 06.03.2011
comment
@Dave: Есть много разных значений, но это значения, а не индексы. Вы действительно хотите умножить на 31 и разделить на 255. 31 представляет максимум для DS, а 255 - это то, как OP хочет это представить. Вы можете думать об этом как о масштабировании до диапазона [0,1], а затем обратно. - person wnoise; 06.03.2011
comment
Да, +1 eznme. Подумав об этом, это правильно - рассматривать черный как особый случай, а затем отображать оставшиеся 31. - person Dave; 06.03.2011