<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Комментарии к публикации «Оптимизация преобразования HSV в RGB для микроконтроллеров»]]></title>
    <link>https://habr.com/ru/articles/166317/</link>
    <description><![CDATA[Комментарии к публикации «Оптимизация преобразования HSV в RGB для микроконтроллеров»]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Wed, 29 Apr 2026 17:05:59 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      

      
        
  
    <item>
      <title>20.01.2013 21:43:07 tyrotoxin</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304650</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304650</link>
      <description><![CDATA[А как насчёт цветовой модели YCbCr? Подойдёт ли она для решения вашей задачи? Она более стандартная и используются как в аналоговой части, так и в кодировке цифрового видео. Там преобразования в RGB и обратно намного проще.]]></description>
      <pubDate>Sun, 20 Jan 2013 21:43:07 GMT</pubDate>
      <dc:creator><![CDATA[tyrotoxin]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 19:48:15 CyberLab</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304648</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304648</link>
      <description><![CDATA[Я Ваш код еще не успел попробовать в работе<br/>
Завтра буду на работе тестировать.<br/>
]]></description>
      <pubDate>Sun, 20 Jan 2013 19:48:15 GMT</pubDate>
      <dc:creator><![CDATA[CyberLab]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 19:35:56 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304646</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304646</link>
      <description><![CDATA[Там сразу несколько реализаций. Первые две (_360, _384) используют double и деление, _Binary — только деление, _Adv и _Adv1 — чистые, _Adv2 — снова деление.<br/>
Adv и Adv1 можно дооптимизировать по точности, коду и скорости разом, но если вас они устраивают — особой нужды в этом нет :)]]></description>
      <pubDate>Sun, 20 Jan 2013 19:35:56 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 17:47:01 CyberLab</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304644</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304644</link>
      <description><![CDATA[Для Arduino использую HSV2RGB<br/>
Ссылка на <a href="http://compcar.ru/forum/showthread.php?9462-%D0%A4%D0%BE%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F-%D0%BF%D0%B8%D0%BA%D1%81%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BF%D0%BE%D0%B4%D1%81%D0%B2%D0%B5%D1%82%D0%BA%D0%B0-%D1%82%D0%B5%D0%BB%D0%B5%D0%B2%D0%B8%D0%B7%D0%BE%D1%80%D0%B0-Pixelight">форум</a> где можно <a href="http://compcar.ru/forum/attachment.php?attachmentid=15185&amp;d=1353774405">скачать HSV2RGB</a>]]></description>
      <pubDate>Sun, 20 Jan 2013 17:47:01 GMT</pubDate>
      <dc:creator><![CDATA[CyberLab]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 12:45:36 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304642</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304642</link>
      <description><![CDATA[Исправил заголовок топика и убрал packed, спасибо за замечание.]]></description>
      <pubDate>Sun, 20 Jan 2013 12:45:36 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:42:25 azudem</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304640</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304640</link>
      <description><![CDATA[<blockquote>Arduino упомянут как самый популярный девайс на хабре, использующий AVR [...]</blockquote><br/>
Ваш код — на чистейшем С (не считая <code>__attribute__</code>), поэтому совершенно ни к чему не привязан, да и мир не заканчивается на AVR и ARM. А FPU лишены большинство микроконтроллеров.<br/>
<br/>
<blockquote>__attribute__ ((__packed__)) для RGB_t прописан для совместимости вот с этим кодом [...]</blockquote><br/>
Опять же — какая разница для чего вы его там используете, если в статье к этому привязки нет. Код у вас просто демонстрирует переход от HSV к RGB модели c целочисленной арифметикой.<br/>
<br/>
Короче, зачем <i>искусственно</i> ограничивать общность статьи?]]></description>
      <pubDate>Sun, 20 Jan 2013 11:42:25 GMT</pubDate>
      <dc:creator><![CDATA[azudem]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:36:49 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304638</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304638</link>
      <description><![CDATA[Из интересных технических решений осталось использование в качестве альтернативной цветовой модели давно забытых Web-safe colors и градиентов на их основе, они пришлись ко двору :)]]></description>
      <pubDate>Sun, 20 Jan 2013 11:36:49 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:34:17 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304636</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304636</link>
      <description><![CDATA[Описанный вами случай подходит и под HSL при L = Lmax/2, S = Smax.<br/>
<br/>
Действительно, при S = 255, V = 255 удобно.<br/>
<br/>
По поводу кода:<br/>
Странно, что у вас вместо byte используется unsigned char.<br/>
Вместо sector % 2 можно использовать (sector & 1), вместо hue % 255 — byte (hue).<br/>
<br/>
По поводу «переделать несложно»:<br/>
На самом деле при этом возникают неприятные эффекты. V — это то значение на которое идёт домножение primary и secondary. Как только оно не 255 — появляется дополнительное деление/умножение в secondary. Более того, если вы начнёте уменьшать S — третья компонента цвета будет расти пропорционально (255-S)*V/255, и это же слагаемое появится и в secondary, а то что там было придётся домножать на S/255. В общем, при любом минимальном понижении S и V такое высокое разрешение по тону станет ненужным. А под конкретную задачу — реализация удачная, не спорю :)<br/>
<br/>
Не берусь сходу дописать код для HSV, но там могут случиться небольшие потери значений при делении.]]></description>
      <pubDate>Sun, 20 Jan 2013 11:34:17 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:24:22 Shark</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304634</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304634</link>
      <description><![CDATA[Не стоит недооценивать хабр :) Если там будут интересные технические решения, то такие узкоспецифические проекты вызывают еще больший интерес.]]></description>
      <pubDate>Sun, 20 Jan 2013 11:24:22 GMT</pubDate>
      <dc:creator><![CDATA[Shark]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:18:15 Shark</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304632</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304632</link>
      <description><![CDATA[<pre><code class="cpp">void set_led_color(unsigned int hue)
{
    // sector specifies which colors are primary and secondary
    unsigned char sector = hue / 0xff;

    // primary color is always full
    const unsigned char primary = 0xff;

    // calculate secondary color value from hue
    unsigned char secondary = abs(sector % 2 * 0xff - hue % 0xff);

    // тут идёт 6 кейсов sector и установка PWM на полученные значения
}
</code></pre>]]></description>
      <pubDate>Sun, 20 Jan 2013 11:18:15 GMT</pubDate>
      <dc:creator><![CDATA[Shark]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:10:44 Shark</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304630</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304630</link>
      <description><![CDATA[Я когда делал HSV сделал Hue 0..1530 (255 * 6) и получилась целочисленная арифметика. Основная идея была такая: 6 участков показывает рост и спад вторичных цветов, если они будут расти 0..255 и спадать 0..255, то мало того что будут получаться целые числа, так ещё и плавность повысится.<br/>
<br/>
P.S. Я делал с S = 255, V = 255, т. е. менять можно было только оттенок, но переделать не очень сложно.]]></description>
      <pubDate>Sun, 20 Jan 2013 11:10:44 GMT</pubDate>
      <dc:creator><![CDATA[Shark]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:05:15 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304628</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304628</link>
      <description><![CDATA[Так как электротехник из меня слабый — схем нет, я ничего не монтирую. Проводами соединена Arduino, радиомодуль nRF24L01+, метр ленты на WS2811 и питание.<br/>
<br/>
Фото будет, даже видео, но вряд ли на хабре — светодиодный жонглёрский реквизит тема очень узкая, мне кажется фаер-шоу и похожие искусства вряд ли будут интересны хабровчанам.]]></description>
      <pubDate>Sun, 20 Jan 2013 11:05:15 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 11:00:21 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304626</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304626</link>
      <description><![CDATA[У HSL есть та же проблема, что и у HSV но в два раза сильнее: в HSL три стороны куба проецируются на конус, а три — на круг, образуя его основание, а у HSL — два конуса. Фактически, у вас две зоны (в окрестностях L = 0 и L = Lmax), где будет много слабо отличающихся друг от друга значений.]]></description>
      <pubDate>Sun, 20 Jan 2013 11:00:21 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 10:48:20 Devgru</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304624</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304624</link>
      <description><![CDATA[ПМ это личное сообщение — private message.<br/>
<br/>
С математическими традициями у меня проблема — и тройка в дипломе, и с FFT уже месяц разбираюсь, чтобы понять. Но попробую учесть Ваш совет.<br/>
<br/>
__attribute__ ((__packed__)) для RGB_t прописан для совместимости вот с <a href="http://sourceforge.net/p/abavr/lib/ci/e3429e3493e08015d94d9237699bf15c085970c7/tree/WS2811/WS2811.h">этим</a> кодом — ассемблерной вставкой для time-critical вывода значений на светодиодную ленту (<a href="http://bleaklow.com/2012/12/02/driving_the_ws2811_at_800khz_with_a_16mhz_avr.html">см. также</a>).<br/>
<br/>
Arduino упомянут как самый популярный девайс на хабре, использующий AVR.<br/>
Собственно, я не уверен что тот же код будет актуальным для контроллеров на ARM — вряд ли там есть необходимость экономить память, циклы процессора, отказываться от float-point и делений (из того же блога — <a href="http://bleaklow.com/2012/06/20/sensor_smoothing_and_optimised_maths_on_the_arduino.html">про скорость деления на AVR</a>).<br/>
<br/>
]]></description>
      <pubDate>Sun, 20 Jan 2013 10:48:20 GMT</pubDate>
      <dc:creator><![CDATA[Devgru]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 09:03:39 Bluefox</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304622</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304622</link>
      <description><![CDATA[А нельзя ли осветить железную часть проекта? Схему? Фото? И возможно ли собрать это дома? Я так понимаю, что у Arduino три аналоговых вывода, которые усиливаются транзисторами, но я, например, никогда не смогу спроектировать такую схему (с обвязками и разделением по питанию). По этому было бы интересно посмотреть и другую сторону.]]></description>
      <pubDate>Sun, 20 Jan 2013 09:03:39 GMT</pubDate>
      <dc:creator><![CDATA[Bluefox]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 08:49:54 azudem</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304620</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304620</link>
      <description><![CDATA[<blockquote>TeX-коды в топик включил в порядке эксперимента. Если есть способ делать это удобнее или правильнее — намекните в ПМ.</blockquote><br/>
Что такое ПМ я не знаю, но если уж вы используйте TeX, то желательно соблюдать математические традиции вместо программерского жаргона типа двоеточия для диапазона и звёздочки для умножения.<br/>
<br/>
<code>__attribute__ ((__packed__)) </code> — лишние. Eсли вам нужна оптимизация по размеру, то разумно так и указать это в опциях для компилятора. «Пакование» структур в явном виде применяется в более специфичных случаях (например, когда нужно обеспечить бинарную переносимость структуры в независимости от опций компилятора).<br/>
<br/>
В-третьих, причём тут привязка к AVR и, тем более, Arduino?<br/>
<br/>
Ну это я попридирался просто. Сама идея использования пространства HSV вместо RGB в некоторых случаях разобрана и, надеюсь, защитит многих от изобретения своих велосипедов.]]></description>
      <pubDate>Sun, 20 Jan 2013 08:49:54 GMT</pubDate>
      <dc:creator><![CDATA[azudem]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 08:01:35 Lincoln6Echo</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304618</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304618</link>
      <description><![CDATA[Я сейчас статью на хабру пишу, где HSL-пространство, но за HSV однозначно привет однополчанам! Hue вы интересно считаете.]]></description>
      <pubDate>Sun, 20 Jan 2013 08:01:35 GMT</pubDate>
      <dc:creator><![CDATA[Lincoln6Echo]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.01.2013 00:00:43 grender</title>
      <guid isPermaLink="true">https://habr.com/ru/articles/166317/#comment_11304616</guid>
      <link>https://habr.com/ru/articles/166317/#comment_11304616</link>
      <description><![CDATA[Ееее. Ура HSV на светодиодах!<br/>
Когда делал лампу настроения, по одной из статей, ужаснулся коду на выбор цвета и количеству условий в RGB. Перешел на HSV и код стал значительно проще.<br/>
Я правда не стал все так круто продумывать и сделал Hue-0...360, Sat-0...255, Val-0...255 и арифметика была не целочисленная. Но я по контроллерам не спец и оптимизация там не понадобилась. Заработало и хорошо.]]></description>
      <pubDate>Sun, 20 Jan 2013 00:00:43 GMT</pubDate>
      <dc:creator><![CDATA[grender]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
