Как я могу преобразовать целое число RGB в соответствующий кортеж RGB (R,G,B)
? Кажется достаточно простым, но я ничего не могу найти на Google.
Я знаю это для каждого RGB (r,g,b)
у Вас есть целое число n = r256^2 + g256 + b
, как я могу решить реверс в Python, IE, данный n
, Мне нужно r
,g
,b
значения.
Вероятно, есть более короткий способ сделать это:
dec=10490586
hex="%06x" % dec
r=hex[:2]
g=hex[2:4]
b=hex[4:6]
rgb=(r,g,b)
EDIT: это неправильно - дает ответ в Hex, OP хотел int. EDIT2: уточнено, чтобы уменьшить страдания и неудачи - необходимо '% 06x', чтобы шестнадцатеричный всегда показывался в виде шести цифр [благодаря комментарию Питера Хансена].
-121--2289746-Довольно URL для Rails 3.x и Rails 2.x без необходимости какого-либо внешнего плагина, но с небольшим взломом, к сожалению.
routes.rb
map.resources :posts, :except => [:show]
map.post '/:year/:month/:slug', :controller => :posts, :action => :show, :year => /\d{4}/, :month => /\d{2}/, :slug => /[a-z0-9\-]+/
application _ controller.rb
def default_url_options(options = {})
# resource hack so that url_for(@post) works like it should
if options[:controller] == 'posts' && options[:action] == 'show'
options[:year] = @post.year
options[:month] = @post.month
end
options
end
post.rb
def to_param # optional
slug
end
def year
published_on.year
end
def month
published_on.strftime('%m')
end
view
<%= link_to 'post', @post %>
Примечание. Для Rails 3.x можно использовать следующее определение маршрута:
resources :posts
match '/:year/:month/:slug', :to => "posts#show", :as => :post, :year => /\d{4}/, :month => /\d{2}/, :slug => /[a-z0-9\-]+/
Имеется ли значок для ответа на ваш вопрос?;)
Btw: файл routing _ test является хорошим местом
Update: При использовании default _ url _ options
используется тупик . Разнесенное решение работает только в том случае, если в контроллере определена переменная @ post
. Если, например, существует переменная @ posts
с массивом записей, нам не повезло (поскольку параметры default _ url _
не имеют доступа к просмотру переменных, например, p
в @ posts.each do | p |
.
Таким образом, это все еще открытая проблема. Кто-нибудь поможет?
-121--4268377-Я не эксперт по Python во всех отношениях, но насколько я знаю, он имеет те же операторы, что и C.
Если это должно работать, и это также должно быть намного быстрее, чем использование модуля и деления.
Blue = RGBint & 255
Green = (RGBint >> 8) & 255
Red = (RGBint >> 16) & 255
Что он делает, чтобы замаскировать самый низкий байт в каждом случае (двоичный и с 255.. Равно 8 единицам). Для зеленого и красного компонентов он делает то же самое, но сначала смещает цветовой канал в нижний байт.
Я бы пошел с NUnit .
Некоторые ссылки: NUnit QuickStart , NuGet Package
-121--872731-Лично я предпочитаю платформу тестирования устройств Visual Studio по двум основным причинам:
Сказав, что практически любая структура модульного тестирования сделает трюк, важно иметь тесты!
-121--872732-Из RGB целого числа:
Blue = RGBint mod 256
Green = RGBint / 256 mod 256
Red = RGBint / 256 / 256 mod 256
Это может быть довольно просто реализовано, как только вы знаете, как его получить.:)
Upd: Добавлена функция python. Не уверен, что есть лучший способ сделать это, но это работает на Python 3 и 2,4
def rgb_int2tuple(rgbint):
return (rgbint // 256 // 256 % 256, rgbint // 256 % 256, rgbint % 256)
Есть также отличное решение, которое использует битшифтинг и маскирование, что, несомненно, гораздо быстрее, что Нильс Пипенбринк опубликовал.
Я предполагаю, что у вас есть 32-битное целое число, содержащее значения RGB (например, ARGB). Затем вы можете распаковать двоичные данные, используя struct
модуль:
# Create an example value (this represents your 32-bit input integer in this example).
# The following line results in exampleRgbValue = binary 0x00FF77F0 (big endian)
exampleRgbValue = struct.pack(">I", 0x00FF77F0)
# Unpack the value (result is: a = 0, r = 255, g = 119, b = 240)
a, r, g, b = struct.unpack("BBBB", exampleRgbValue)
Возможно, есть более короткий способ сделать это:
dec=10490586
hex="%06x" % dec
r=hex[:2]
g=hex[2:4]
b=hex[4:6]
rgb=(r,g,b)
EDIT: это неправильно - дает ответ в Hex, ОП хотел int. EDIT2: уточнено, чтобы уменьшить страдания и неудачи - нужно '%06x', чтобы шестнадцатеричное число всегда отображалось как шесть цифр [благодаря комментарию Питера Хансена].
def unpack2rgb(intcol):
tmp, blue= divmod(intcol, 256)
tmp, green= divmod(tmp, 256)
alpha, red= divmod(tmp, 256)
return alpha, red, green, blue
Если бы только предложение divmod(value, (divider1, divider2, divider3...))
было принято, оно бы упростило и различные преобразования времени.