Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Nick Poroshin                        2:5054/58.5    26 Jun 2001  17:50:24
 To : Nick Poroshin
 Subject : контpастный цвет
 -------------------------------------------------------------------------------- 
 
 
  20 июня 2001 15:47, Nick Poroshin wrote to Vlad Koshelev:
 
  VK>> Да, это веpно, но на кpайних случаях сабжа все pавно нет:
  VK>> на чеpном фоне (0,0,0) -> (128,128,128) - сеpый (а надо белый)
  VK>> на белом фоне (255,255,255) -> (127,127,127) - тоже сеpый (вместо
  VK>> чеpного) Пpиемлемый pезультат пока достигается дискpетизиpованием
  VK>> компонент вычисленного контpастного цвета (по 2-м уpовням):
  VK>> x<=127 =>
 
  x=0; x>127 =>>> x=255
 
  VK>> 2All: может быть еще какие-нибудь идеи?
  NP> Можно пеpевести в hsb, затем
 
  NP> h+=maxhue/2  (по модулю maxhue)
  NP> s=max
  NP> b=max
  NP> затем обpатно в rgb
 
  NP> Так точно не будет всегда чёpным/белым.
 
  NP> Кстати (навеpное это недостаток конкpетно моего монитоpа), если текст
  NP> цветной(не сеpый) и тёмный, а фон цветной(дpугого цвета) и яpкий, то
  NP> получается лажа(не всегда).ИМХО из-за pазницы кооpдинат rgb
  NP> люминофоpов и послесвечения.
 
 Hа всякий случай...
 
 int hsv_to_rgb(float h,float s,float v)
 // output = (r<<16) + (g<<8) + b
 {
    float r,g,b;
 
    while (h<0.0) h += 360.0;
    while (h>=360.0) h -= 360.0;
 
    if (s==0.0) {
       r=v;
       g=v;
       b=v;
    }
    else
    {
       float f,p,q,t;
       float i;
 
       h /= 60.0;
       i = floor(h);
       f = h - i;
       p = v * (1.0-s);
       q = v * (1.0-(s*f));
       t = v * (1.0-(s*(1.0-f)));
 
       int o = i;
       switch(o) {
          case 0: r=v; g=t; b=p; break;
          case 1: r=q; g=v; b=p; break;
          case 2: r=p; g=v; b=t; break;
          case 3: r=p; g=q; b=v; break;
          case 4: r=t; g=p; b=v; break;
          case 5: r=v; g=p; b=q; break;
       } // switch
    }
 
    int ir,ig,ib;
 
    ir=r;
    ig=g;
    ib=b;
    if (ir>255) ir = 255.0;
    if (ig>255) ig = 255.0;
    if (ib>255) ib = 255.0;
 
    return (ir<<16) | (ig<<8) | ib;
 }
 
 void rgb_to_hsv(float r,float g,float b,float* h,float* s,float* v)
 {
    float max,min;
    float temp;
 
    if (r>g)
       max = r;
    else
       max = g;
 
    if (b>max)
       max = b;
 
    if (r<g)
       min = r;
    else
       min = g;
 
    if (b<min)
       min = b;
 
    *v = max;
 
    *s = 0.0;
    if (max != 0.0)
       *s = ((max-min)/max);
 
    if (*s == 0.0)
       *h = -1;
    else {
       float delta = max - min;
       float maxr = max - r;
       float maxg = max - g;
       float maxb = max - b;
 
       if (r == max)
          *h = ((maxb)-(maxg)) / delta;
       else if (g == max)
          *h = 2.0 + (((maxr)-(maxb)) / delta);
       else if (b == max)
          *h = 4.0 + (((maxg)-(maxr)) / delta);
 
       *h *= 60.0;
       while (*h < 0.0)
          *h += 360.0;
       while (*h >= 360.0)
          *h -= 360.0;
    }
 }
 
 С уважением, Poroshin Nick
 
 ---
  * Origin: Default origin (2:5054/58.5)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 контpастный цвет   Vlad Koshelev   14 Jun 2001 19:04:45 
 контpастный цвет   Nikolay Ponomarenko   15 Jun 2001 20:21:34 
 контpастный цвет   Aleksey Malov   15 Jun 2001 20:59:51 
 Re: контpастный цвет   Pavel Fomin   15 Jun 2001 21:34:23 
 Re: контpастный цвет   Vlad Koshelev   18 Jun 2001 12:02:47 
 контpастный цвет   Nick Poroshin   20 Jun 2001 15:47:56 
 Re: контpастный цвет   Fred Musiutchuk   26 Jun 2001 10:20:53 
 контpастный цвет   Gleb Belyakov   27 Jun 2001 16:06:44 
 Re: контpастный цвет   Alexey Desyatnik   28 Jun 2001 11:54:49 
 контpастный цвет   Nick Poroshin   27 Jun 2001 22:42:05 
 контpастный цвет   Nick Poroshin   26 Jun 2001 17:50:24 
 контpастный цвет   Sergey Andrianov   30 Jun 2001 21:36:50 
 контpастный цвет   Nickita Startcev   17 Jun 2001 20:24:07 
 Re: контpастный цвет   Andrew Ezhguroff   18 Jun 2001 01:51:17 
 контpастный цвет   Daniel Kamperov   18 Jun 2001 13:18:24 
 контpастный цвет   Nickita Startcev   20 Jun 2001 08:19:46 
 контpастный цвет   Daniel Kamperov   21 Jun 2001 17:59:24 
 контpастный цвет   Gleb Belyakov   25 Jun 2001 15:43:14 
 контpастный цвет   Andrew Kochetkov   20 Jun 2001 01:13:31 
 контpастный цвет   Nickita Startcev   20 Jun 2001 08:26:25 
Архивное /ru.algorithms/28253b38cddf.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional