За последние 24 часа нас посетили 18387 программистов и 1647 роботов. Сейчас ищут 1829 программистов ...

Количество переменных для отображения цвета

Тема в разделе "PHP для новичков", создана пользователем Vladislav_Yushkin, 6 ноя 2009.

  1. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Подскажите пожалуйста.
    Пишу
    Код (Text):
    1.   for ($i=0; $i<=300; $i++)
    2.    {
    3.      $r=число;
    4.      $g=число;
    5.      $b=число;
    6.       $color[$i] = imagecolorallocate ($image, $r, $g, $b);
    7.   }
    для определения цветов и помещения их в массив.
    Первые 256 цветов размещаются, а остальные все принимают один цвет.
    Неужели присутствует такое ограничение, и если да то как с этим бороться?
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    В цветовой схеме RGB 16777216 цветов, если взять кубический корень из этого числа, получим 256.
    Ещё вопросы?
     
  3. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Я о другом...
    Переменные
    $color[0]
    $color[1]
    $color[2]
    ...
    $color[255]
    принимают определенный цвет
    а
    $color[256]
    $color[257]
    $color[258]
    все имеют тот же цвет
    что и $color[255].
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Потому что цвета, соответствующего индексу массива нет.
    Неправильно распределяете, значит.
    Смотрите код, чтобы ни одно из значений не принимало значение > 256, а в произведении не превышали куб из 256
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1. <?php
    2.  
    3. if(($r*$g*$b) > 16777216) die("Required color does not exists");
    4.  
    5. ?>
     
  6. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Переменные
    $r
    $g
    $b
    имеют значения от 0 до 255 это само сабой разумеется.
    У меня другаю проблемма
    Первые 256 переменных присваювают цвет, а все остальные хоть какие цвета задавай имеют один и тот же цвет который был задан 256-й переменной.
     
  7. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Задам вопрос по другому.

    Вот программа
    Код (Text):
    1.  
    2. <?
    3.  
    4. $diagramWidth = 801;
    5. $diagramHeight = 801;
    6.  
    7. // содаем изображение
    8. $image = imageCreate($diagramWidth, $diagramHeight);
    9.  
    10. // Регистрируем используемые цвета
    11.  
    12.  
    13.  
    14.   for ($i=0; $i<=300; $i++)
    15.    {
    16.     $r=0;
    17.     $g=0;
    18.     $b=0;
    19.     $color[$i] = imagecolorallocate ($image, $r, $g, $b);
    20.   }
    21.  
    22.   for ($i=300; $i<=500; $i++)
    23.    {
    24.     $r=255;
    25.     $g=255;
    26.     $b=255;
    27.     $color[$i] = imagecolorallocate ($image, $r, $g, $b);
    28.   }
    29.  
    30. // заливаем цветом фона
    31. imageFilledRectangle($image, 0, 0, $diagramWidth - 1, $diagramHeight - 1, $color[350]);
    32.  
    33.  
    34.  
    35.  
    36. // Отправляем заголовок Content-type
    37. //header("Content-type:  image/gif");
    38. header("Content-type:  image/png");
    39.  
    40. // задаем чересстрочный режим
    41. imageInterlace($image, 1);
    42.  
    43. // делаем цвет фона прозрачным
    44. imageColorTransparent($image, $colorBackgr);
    45.  
    46. // и выводим изображение
    47. //imageGIF($image);
    48. imagePNG($image);
    49.  
    50. ?>
    каким должна получиться заливка прямоугольника?
    Как я понимаю должна быть белой, а она получается черной.
    Кто объяснит почему так получается, и как с этим можно бороться.
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    A зачем вам массив с кучей ОДИНАКОВЫХ цветов? О.о
    Кстати:

    PHP:
    1. <?php
    2.  
    3. $colors = array();
    4. $imageC = imagecreate(1, 1);
    5.  
    6. for($i=0,$r=0,$g=0,$b=0; $i<16777216; ++$i,$r++,$g++,$b++) {
    7.     $colors[$i] = imagecolorallocate($imageC, $r, $g, $b);
    8. }
    9.  
    10. ?>
    Зрите в суть, пример для вас писал!
     
  9. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Ну, это для примера.
    Там разные цвета, они берутся из базы данных.
    А в примере два цыета чтобы точно было понятно какой цвет должен получиться. А получается другой.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Ну в коде проблем нет, он отрабатывает правильно.
    Смотрите на реальных данных, что именно там не так, по данным вами материалам я проблем не вижу.
     
  11. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Зачем смотреть на реальный код. В реальном тажа самая проблемма.
    Что и в приведенном.
    Мне все же интересно почему выводится черная заливка. Должна залиться белым.

    Apple
    >>>Ну в коде проблем нет, он отрабатывает правильно.

    У вас получилось что заливка белая?
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Мне ещё раз повторить про 256 цветов?
    Если сами не догадываетесь - дам решение, но больше объяснять тогда ничего не буду.
    Заменить imageCreate на imageCreateTrueColor
     
  13. Vladislav_Yushkin

    Vladislav_Yushkin Активный пользователь

    С нами с:
    19 июн 2007
    Сообщения:
    71
    Симпатии:
    0
    Я так и не понял причину, но с imageCreateTrueColor все работает.
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    мануал читаем по этим двум функциям.
    Там все написано.