Преобразование целочисленного диапазона [0-255] в диапазон с плавающей запятой [0,0-1,0] - PullRequest
1 голос
/ 02 апреля 2012

В WxWidget цвета представлены целочисленной тройкой RGB.Для взаимодействия с другими библиотеками, использующими триплетное представление [0.0-1.0], необходимо преобразование.

Существует ли такая функция преобразования в WxPython, Numpy или Python?

1 Ответ

8 голосов
/ 02 апреля 2012

Вы можете просто разделить каждый элемент на 255 (или 256 в зависимости от того, хотите ли вы, чтобы верхний диапазон включал или исключал 1):

pax> python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> rgbvar1 = [80,160,240] ; rgbvar1
[80, 160, 240]

>>> rgbvar2 = [x / 255.0 for x in rgbvar1] ; rgbvar2
[0.3137254901960784, 0.6274509803921569, 0.9411764705882353]

>>> rgbvar3 = [round(x * 255) for x in rgbvar2] ; rgbvar3
[80, 160, 240]

Как вы можете видеть из rgbvar3, вы можете использоватьаналогичный метод, чтобы преобразовать их обратно.

Чтобы убедиться, что это работает, может помочь следующее:

>>> for i in range(256):
...     j = i / 255.0
...     k = round(j * 255)
...     if i != k:
...         print('Bad at %d'%(i))
... 
>>>

Тот факт, что он не показывает ошибок для ожидаемых возможных входных значений (целые числа 0 - 255), означаетчто обратная операция должна работать нормально.

...