Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Delphi на каждый день | |||||||||||||||||||||||||||||||||||||||||||||
Этот выпуск для Вас подготовил Баринов Александр. Здравствуйте, уважаемые подписчики! Вот и пришла наша следующая встреча. Сегодня мы поговорим о цвете вообще. Казалось бы, при чем в программировании цвет? Но цвет играет совсем не последнюю роль в интерфейсе программы. А помните, как было приятно работать и открывать вновь и вновь какую-то программу с весьма удачным, дружелюбным, красивым интерфейсом, а как было неприятно работать в программе, где кнопка лезла на кнопку, и, вообще, ничего нельзя было понять? Конечно, сейчас роль оформления интерфейса в серьезных программах перешла к отдельным людям - художникам-дизайнерам. А если Вы просто хотите написать маленькую, но симпатичную программку? Нет, программист определенно должен обладать хотя бы понятием о цвете. А ведь, кроме всего, это так интересно... | |||||||||||||||||||||||||||||||||||||||||||||
Ссылки... | |||||||||||||||||||||||||||||||||||||||||||||
Вы можете связаться c автором с помощью E-mail. Если Вы пропустили предыдущие выпуски рассылки, Вы можете найти их в архиве. Если Вам интересно посмотреть, как работает то, что описано в текущем выпуске, Вы можете прямо сейчас скачать архив с примерами алгоритмов. Файлы написаны в Delphi 5, но не откомпилированы. Архив в формате ZIP и занимает, обычно, около 10 Кбайт. | |||||||||||||||||||||||||||||||||||||||||||||
Этот цветной мир или почему RGB? Аббревиатура RGB, как, наверное, знают все, переводится на русский как Красный-Зеленый-Синий. Именно из этих трех цветов складываются остальные цвета и оттенки, которые мы видим на экранах телевизоров или мониторов. Не следует, однако, думать, что это единственная схема представления цветов. В печати, например, используется схема CMYK, а наш человеческий глаз вообще не имеет ничего общего ни с RGB, ни с CMYK. Но так или иначе, исторически и технически сложилось, что и монитор и телевизор работают только по схеме RGB, поэтому ее и имеет смысл рассматривать при разработки интерфейса программы. Итак, согласно теории RGB любой цвет, который мы можем получить, состоит из трех компонентов: красного цвета, зеленого цвета и синего цвета. Соответственно каждый цвет или оттенок зависит только от того, какую яркость будет иметь каждая из составляющих компонент. Если, например, зеленая и синяя составляющая будет равна нулю, то остается только красная составляющая, яркость которой будет определять оттенок красного цвета. Опять-таки, согласно теории RGB каждая компонента должна иметь свою яркость. Яркость разделили на 256 градаций (от 0 до 255). Во-первых, под это хорошо подходит то, что яркость одной компоненты описывается одним байтом, и, во-вторых, при такой градации мы получаем 256*256*256=16'777'216 цветов (что вполне достаточно для адекватного восприятия изображения). Любой из более 16 миллионов цветов можно получить по трем координатам. Соответственно, в языке должна быть команда, которая генерирует цвет по заданным трем числам. И такая команда есть в Delphi. Это: Пример использования функции: При таких значениях функции, в переменную C будет записан желтый цвет. Кроме того, я также рекомендую Вам запомнить следующие константы, которые соответствуют основным цветам. Их легко запомнить, зная английский.
Таким образом, clYellow = RGB(255,255,0) (см. пример выше). Кроме приведенных здесь цветовых констант, существуют также цветовые "переменные". Это также символьные названия цветов, которые соответствуют цвету каких-либо системных элементов Windows (например, цвет активного заголовка, цвет шрифта всплывающей подсказки и так далее). Такие цветовые "переменные" целиком и полностью зависят от установленных в системе настроек. В частности от Оформления Рабочего стола (см. Панель управления > Экран > Оформление). Вот эти переменные:
clScrollBar - цвет полосы прокрутки. Если присмотреться, то полоса прокрутки залита не полностью, а точками (используйте экранную лупу для просмотра) какого-то цвета и белыми точками. Так вот эта переменная возвращает цвет не белых точек. Вот и все основные знания о цвете. Примеры смотрите в архиве. А где можно использовать то, что здесь было описано? Да где угодно - это зависит только от Вашей фантазии и творчества. Не бойтесь - творите! | |||||||||||||||||||||||||||||||||||||||||||||
Что такое TColor и с чем его едят? Для хранения цвета существует свой собственный тип, который называется TColor. Этот тип содержит информацию, как о самом цвете, так и том, каким образом его заменить, если, например, цветовая палитра системы не поддерживает этот цвет (скажем, установлено всего 256 цветов, а цвет, заданный в переменной, вылезает далеко за пределы этих 256 цветов). Тип TColor состоит из четырех байт. Первый байт - указатель на замену цвета (о нем поговорим позже). Второй байт - яркость красного цвета от 0 до 255 (от 00 до FF). Третий байт - яркость зеленого цвета от 0 до 255 (от 00 до FF). И, наконец, четвертый байт - яркость синего цвета, также, от 0 до 255 (от 00 до FF). А как Вы уже знаете, из этих трех цветов: красного, зеленого и синего, регулируя их яркость, можно составить практически любой цвет. Поговорим теперь о первом байте - указателе на замену цвета. Итак, этот байт может принимать три различных значения - ноль ($00), единицу ($01) или двойку ($02). Что это значит: Ноль ($00) - цвет, который не может быть воспроизведен точно, заменяется ближайшим цветом из системной палитры. Видимо, всегда лучше устанавливать значение первого байта равным нулю ($00), по крайней мере, так происходит при получении типа TColor при помощи функции RGB. И, напоследок, несколько примеров: И как всегда, не бойтесь экспериментировать! | |||||||||||||||||||||||||||||||||||||||||||||
Градиентная заливка и сложение цветов. Иногда бывает нужно сложить два или более цветов для получения что-то типа переходного цвета. Делается это весьма просто. Координаты получаемого цвета будут равны среднему значению соответствующих координат всех цветов. Например, нужно сложить красный и синий. Получаем В результате получаем сиреневый цвет. Также надо поступать, если цветов более чем 2: сложить соответствующие координаты, потом каждую сумму разделить нацело на количество цветов. Поговорим теперь о градиентной заливке. Градиентная заливка - это заливка цветом с плавным переходом от одного цвета к другому. Итак, пусть заданы 2 цвета своими координатами ((A1, A2, A3) и (B1, B2, B3)) и линия (длиной h пикселов), по которой нужно залить. Тогда каждый цвет каждого пиксела, находящегося на расстоянии x пикселов от начала будет равен (A1-(A1-B1)/h*x, A2-(A2-B2)/h*x, A3-(A3-B3)/h*x). Теперь, имея линию с градиентной заливкой, можно таким образом залить совершенно любую фигуру: будь то прямоугольник, круг или просто произвольная фигура. Вот как выглядит описанный алгоритм: {Считается, что координаты первого цвета равны (A1, A2, A3), а второго (B1, B2, B3)}{Кроме того, линия начинается в координатах (X1,Y1), а заканчивается в (X2,Y1)} Var h,i: Integer; begin h:=X2-X1-1; for i:=0 to h do begin PaintBox1.Canvas.Pen.Color:=RGB(A1-(A1-B1)/h*i, A2-(A2-B2)/h*i, A3-(A3-B3)/h*i); PaintBox1.Canvas.Pen.Rectangle(I,Y1,I+1,Y1); end; end. Более подробно рассмотреть работу алгоритма можно в архиве с примерами алгоритмов. В принципе, алгоритм не сложный, и может быть легко выведен. Я думаю, что в более мелких нюансах Вы разберетесь сами, особенно с архивом примеров. | |||||||||||||||||||||||||||||||||||||||||||||
Опрос | |||||||||||||||||||||||||||||||||||||||||||||
Уважаемые подписчики! Найдите, пожалуйста, несколько секунд, чтобы ответить на представленный здесь вопрос. Это поможет сделать мне рассылку более информативной и привлекательной. Просто нажмите на вариант ответа, а потом отправьте созданное письмо. Какую из этих тем Вы бы хотели увидеть в следующих выпусках? 1. Работа с датой и временем в Delphi. 5. Хотел бы увидеть все эти темы. Спасибо за участие в опросе! | |||||||||||||||||||||||||||||||||||||||||||||
Заключение | |||||||||||||||||||||||||||||||||||||||||||||
Если Вам понравилась рассылка, перешлите ее друзьям. Пусть они почитают и тоже подпишутся. А подписаться можно прямо здесь. Для этого достаточно ввести Ваш e-mail и нажать кнопку Ok. До скорой встречи! |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||