我正在使用輸出值爲0-255的電位器。我想要它做的是以包含256個步驟的方式改變RGB LED的顏色,其將以儘可能多的精度顯示LED上的所有顏色you can get。如何將單個電位器值轉換爲R,G,B?
問題: 如何將該單一值(0-255)轉換爲可應用於LED的rgb代碼?
最明顯的解決方案是創建一個包含所有256個可能值的字典,並手動將RGB代碼分配給這些值。我不想這樣做,我試圖找到更多的數學解決方案。
我正在使用輸出值爲0-255的電位器。我想要它做的是以包含256個步驟的方式改變RGB LED的顏色,其將以儘可能多的精度顯示LED上的所有顏色you can get。如何將單個電位器值轉換爲R,G,B?
問題: 如何將該單一值(0-255)轉換爲可應用於LED的rgb代碼?
最明顯的解決方案是創建一個包含所有256個可能值的字典,並手動將RGB代碼分配給這些值。我不想這樣做,我試圖找到更多的數學解決方案。
使用matplotlib colormaps之一。我會推薦jet
色彩地圖,因爲大多數人都熟悉藍色代表小值而紅色代表大值的解釋。
from matplotlib import cm
pot_values = [0, 51, 102, 153, 204, 255]
rgb = []
for x in pot_values:
val = cm.jet(float(x)/255)[:3] # The 4th element is gamma
rgb.append([round(x*255) for x in val])
print(rgb)
# Output:
# [[0.0, 0.0, 128.0],
# [0.0, 76.0, 255.0],
# [41.0, 255.0, 206.0],
# [206.0, 255.0, 41.0],
# [255.0, 104.0, 0.0],
# [128.0, 0.0, 0.0]]
這正是我所期待的。我可以說matplotlib可能是我最不希望擁有此功能的庫。 – Janekmuric
@Janekmuric爲此使用'matplotlib'的好處是,通過從'cm.jet'切換到'cm.cool','cm.nipy_spectral','cm.rainbow'來測試不同的顏色映射是相對容易的等等 –
你想要什麼樣的精度?你在找什麼樣的彩色地圖?您可能首先需要查看http://matplotlib.org/users/colormaps.html,以確定您希望三種顏色映射到您的256個值的集合如何影響要使用的數學公式。 – JAB
每個LED的範圍是什麼 - 也是0到255? – stdunbar
rgb值是從0到255的值的三元組。因此,您的單個0-255範圍必須以某種方式映射 –