powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Изменить яркость цвета
9 сообщений из 9, страница 1 из 1
Изменить яркость цвета
    #32166805
nomorenames
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может кто сталкивался?
Надо программно изменить яркость цвета, скажем, увеличив на порядок. Пытался возиться с масками, но не найду зависимость, кто за яркость отвечает.

покажу как хотелось бы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TForm1.acSelectColorExecute(Sender: TObject);
var
  I: Integer;
begin
  if (Sender is TSpeedButton) then
    if ColorDialog1.Execute then
        For I:=  0  to ComponentCount - 1  do begin
          {изменяем цвет панели, находящейся рядом с кнопкой номер такой-то}
          if Components[I].Name = 'Panel' + RightStr((Sender as TSpeedButton).Name, 1 ) then begin
            (Components[I] as TPanel).Color := ColorDialog1.Color;
            (Components[I+ 1 ] as TPanel).Color := ColorDialog1.Color OR $НЕ_ЗНАЮ_НА_ЧТО;
          end;
          {пишем в эдите с номером таким-то цвет в  16 -ричном формате}
          if Components[I].Name = 'Edit' + RightStr((Sender as TSpeedButton).Name, 1 ) then
            (Components[I] as TEdit).Text := AnsiReplaceStr(Format('$'+'%8x', [ColorDialog1.Color]), ' ', '0');
        end;
end;
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166810
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Я немного не понял что надо-то?

У цвета есть RGB-составляющие. Их и увеличивай.
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166818
nomorenames
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, надо взять любой цвет, и не изменяя его тональности увеличить яркость, например в 2 раза. Потом новый цвет присвоить следующей панели.
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166824
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Берешь любой цвет и к каждой из RBG прибавляешь одно и тоже число.
Следи, что бы не вылезло за 255.

-----------------------------------------------
Для "наполовину": прибавь ко всем (R+G+B)/6
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166834
_designer_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть составляющие цвета HLS (могу соврать HBS) по-моему: Hue, Light, Saturation (или Hue, Bright, Saturation) Там компоненты в процентах задаются. Где-то в иНете видел перевод RGB2HLS (RGB2HBS) не помню.
Но имхо сделай простое масштабирование по каждой компоненте, я так под DOS сто лет назад Alpha Blending картинки делал. Этот метод точно позволит затемнить, а вот насчет засветления не уверен. Затемнение:
dR = abs(Rначальное - Rконечное) / количество шагов
dG = ...
dB = ...
for (i = ...
R = Rначальное - dR * i
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166845
_designer_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прибавление одного и того же числа чревато потерей цвета.
Этот метод справедлив только в случае чистых цветов типа:
Красный, Синий, Зеленый, Желтый ... Белый
точнее:
R = 255 G = 0 B = 0
R = 0 G = 255 B = 0
R = 0 G = 0 B = 255
R = 255 G = 255 B = 0
R = 255 G = 0 B = 255
R = 0 G = 255 B = 255
R = 255 G = 255 B = 255

для примера:
(R G B)
если к (0 64 128) прибавить по 127 получим (127б 191б 255)
испоганим цвет!
а если (0 64 128) -> HLS (210 50 100) увеличим яркость HLS (210 100 100) получим RGB (0 128 255)
вот так !
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166853
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Ну я этим не занимался.
Я просто попытался подсказать где копать надо. Неудачно.
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32166886
_designer_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотри здесь, если в математике разбираешься...
http://www.codenet.ru/progr/cg/lec_6_2.php
...
Рейтинг: 0 / 0
Изменить яркость цвета
    #32167033
nomorenames
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
function Bright(Color: TColor; BrightPercent: Byte): TColor;
var
  r, g, b: Byte;
begin
  Color := ColorToRGB(Color);
  r := GetRValue(Color);
  g := GetGValue(Color);
  b := GetBValue(Color);

  {muldiv( 255 -r, BrightPercent, 100 ); - значение цвета в процентах, 
  на которое надо увеличить исходный цвет (integer)}

  r := r + muldiv( 255  - r, BrightPercent,  100 ); 
  g := g + muldiv( 255  - g, BrightPercent,  100 );
  b := b + muldiv( 255  - b, BrightPercent,  100 );
  result := RGB(r, g, b);
end; 
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Изменить яркость цвета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]