Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Затемнение картинки в Image, Работа с компонентом Image 
:(
    Опции темы
Katrina
Дата 17.2.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.2.2005

Репутация: нет
Всего: нет



smile Хочу лучше изучить графику в делфи и так пишу программу "MyDesktop". Здесь столкнулась с проблемой: как затемнить картинку в Image, как это на нормальном десктопе? Может кто-то подскажет, как сделать или даст ссылки. Пожалуйста!! smile
PM   Вверх
drinkOut
Дата 17.2.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 10.2.2005
Где: мой стакан?

Репутация: нет
Всего: нет



Посмотри здесь в разделе "Цвета и Палитра". smile
--------------------
Жизнь жестока - когда у меня на руках все карты, она начинает играть в шахматы...www.certifications.ru - проверь себя
PM MAIL ICQ   Вверх
Katrina
Дата 17.2.2005, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.2.2005

Репутация: нет
Всего: нет



Спасибо за ссылку, но я знаю этот сайт. К сожалению, там не то, что нужно! smile
PM   Вверх
~FoX~
Дата 17.2.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Katrina
Цитата(Katrina @ 17.2.2005, 21:00)
затемнить картинку в Image

??????????
Что конкретно тебя интересует?????


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Katrina
Дата 17.2.2005, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.2.2005

Репутация: нет
Всего: нет



Меня интересует следующее: если я кликнула на Image, то эта картинка затемняется как на реальном десктопе, кликаю второй раз - снова без затемнения. Плиз, подскажите, как!! smile
PM   Вверх
Katrina
Дата 18.2.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.2.2005

Репутация: нет
Всего: нет



Извините за назойливость.
smile Пожалуйста, подскажите, почему.
Использую такую функцию для затемнения картинки:
Код

function TForm1.ChangeColor(InputColor: TColor; Lighten: Boolean): TColor;
var
  r,g,b: extended;
begin
  r := GetRValue(InputColor);
  g := GetGValue(InputColor);
  b := GetBValue(InputColor);
 if Lighten = True then
  begin
    r := r+((r/255)*100);
    g := g+((g/255)*100);
    b := b+((b/255)*100);
  end else
  begin
    r := r-((r/255)*100);
    g := g-((g/255)*100);
    b := b-((b/255)*100);
  end;
 if r > 255 then r := 255;
  if r < 0 then r := 0;
  if g > 255 then g := 255;
  if g < 0 then g := 0;
  if b > 255 then b := 255;
  if b < 0 then b := 0;
 Result := RGB(byte(Round(r)),byte(Round(g)),byte(Round(b)));
end;

В обработчике событий (например, кнопка) пишу так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
begin
for i:=0 to form1.Image1.Width do for j:=0 to form1.Image1.Height do
form1.Image1.Canvas.Pixels[i,j]:=Form1.ChangeColor(form1.Image1.Canvas.Pixels[i,j],false);
end;

С этим кодом картинка затемнена.
На второй кнопке обрабатываю событие, чтобы вернуть картинку обратно (без затемнения):
Код

procedure TForm1.Button2Click(Sender: TObject);
var
i, j: integer;
begin
for i:=0 to form1.Image1.Width do for j:=0 to form1.Image1.Height do
form1.Image1.Canvas.Pixels[i,j]:=Form1.ChangeColor(form1.Image1.Canvas.Pixels[i,j],true);
end;

Так, с этим обратным кодом картинка возвращается, но чуть-чуть затемнена. И так, если кликать снова и снова, то в итоге через 5-6 кликов картинка будет такая: белый квадрат-черный квадрат и т.д.
Что не так в этом коде, может в этот код что-то нужно добавить?
Заранее спасибо!

PM   Вверх
Underdark
Дата 18.2.2005, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 12.7.2004
Где: Ульяновск

Репутация: нет
Всего: 2



Всё дело в простой школьной математике!

Смотри фактически ты делаешь вот так:
пусть r=125, то затемнение r*(1-100/255)=r*(1-0.392)=76;
теперь обратно r*(1.392)=105,792;

Особенность работы с процентами!!! X-Y%+Y%<X!!! smile

P.S.
Условия типа
Цитата

if r < 0 then r := 0;

никогда не выпонятся, т.к. X-Y% всегда больше нуля!!!, если Y<100, а у тебя это так! Поэтому эту проверку, в данном случае, можно убрать вовсе!

P.P.S.
Попробуй делать затемнение и засветление на определеное число (например, r:=r-58), но тогда надо будет оставить проверку, про которую я говорил выше smile

Это сообщение отредактировал(а) Underdark - 18.2.2005, 15:29
PM MAIL   Вверх
Katrina
Дата 18.2.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.2.2005

Репутация: нет
Всего: нет



smile О, спасибо, это здорово работает!
Код

function TForm1.ChangeColor(InputColor: TColor; Lighten: Boolean): TColor;
const
col=60;
var
  r,g,b: extended;
begin
  r := GetRValue(InputColor);
  g := GetGValue(InputColor);
  b := GetBValue(InputColor);
 if Lighten = True then
  begin
    r := r+col; g := g+col; b := b+col;
  end else
  begin
    r := r-col; g := g-col; b := b-col;
  end;
 if r > 255 then r := 255;    if r < 0 then r := 0;
  if g > 255 then g := 255;   if g < 0 then g := 0;
  if b > 255 then b := 255;   if b < 0 then b := 0;
 Result := RGB(byte(Round(r)),byte(Round(g)),byte(Round(b)));
end;

PM   Вверх
Zero
Дата 20.2.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Katrina @ 17.2.2005, 21:00)
Хочу лучше изучить графику в делфи и так пишу программу "MyDesktop".

Katrina какое совпадение, я в том семестре делал курсач на тему создания Desktop'a, если хочешь могу скинуть, может что-нибудь на какие-нибудь мысли наведёт.
PM MAIL ICQ   Вверх
p0s0l
Дата 26.2.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Перенесено из раздела Дельфи


--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.