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