Плавное изменение картинки в Timage при наведении мышки

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Плавное изменение картинки в Timage при наведении мышки

Сообщение user6745 » 01.03.2021 18:39:19

Имеется на форме объект TImage. В TImage отображается картинка PNG.

Как сделать так, чтобы при наведении указателя мышки на TImage исходная картинка плавно за 2 секунды менялась на любую другую PNG которую можно скинуть в папку с программой.
А также когда мышку обираем от TImage, то TImage плавно за 2 секунды возвращается в исходное состояние.

Подскажите пожалуйста, как это сделать?
user6745
новенький
 
Сообщения: 11
Зарегистрирован: 15.01.2021 20:05:25

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 01.03.2021 19:33:04

Простенькая процедура Blend в помощь !
(Исправлено по совету iskander-а )
Код: Выделить всё
// Прозрачность
procedure Blend( Src1,Src2,Dst: TBitmap; Amount: extended);
var x,y:integer;
    ps1,ps2,pd:pbytearray;
begin
for y:=0 to Src1.Height-1 do begin
ps1:=Src1.ScanLine[y];
ps2:=Src2.ScanLine[y];
Dst.BeginUpdate; ;
pd:=Dst.ScanLine[y];
for x:=0 to Src1.Width-1 do begin
  pd[x*3]:=round((1-Amount)*ps1[x*3]+Amount*ps2[x*3]);
  pd[x*3+1]:=round((1-Amount)*ps1[x*3+1]+Amount*ps2[x*3+1]);
  pd[x*3+2]:=round((1-Amount)*ps1[x*3+2]+Amount*ps2[x*3+2]);
  end;
Dst.EndUpdate;
end;
end;


Две картинки на входе одна на выходе..
Amount (от нуля до единицы) задает степень смешения .
Процедура не самая быстрая но для этой задачи ее досточно.
Заточена под 24-х битные битмапы.
Последний раз редактировалось Alex2013 02.03.2021 19:37:02, всего редактировалось 2 раз(а).
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение olegy123 » 02.03.2021 11:14:03

user6745 писал(а):Подскажите пожалуйста, как это сделать?

1) Своими силами: Путем изменения прозрачности, оно же альфа канал. 2 картинки у одной альфа=1.0 у другой альфа=0.0, изменения у первой от 1 до 0 - пропадает, у другой 0 до 1 - появляется и наоборот.
2) GIF - иметь анимационную картинку, и вовремя запускать и останавливать на нужном кадре.
https://www.youtube.com/watch?v=EVk28wzHNII,
Wile64 https://www.youtube.com/watch?v=KPEaSXhcMqM https://github.com/aducom/gifanim,
olegy123
долгожитель
 
Сообщения: 1635
Зарегистрирован: 25.02.2016 12:10:20

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение iskander » 02.03.2021 12:09:42

Кмк, Blend от Alex2013 вполне подойдёт, если довести до рабочего состояния.
iskander
постоялец
 
Сообщения: 404
Зарегистрирован: 08.01.2012 18:43:34

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Снег Север » 02.03.2021 12:28:50

Graphics32
https://github.com/graphics32
в комплекте есть демка с блендингом
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2735
Зарегистрирован: 27.11.2007 16:14:47

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение user6745 » 02.03.2021 16:06:23

Спасибо. Попробую предложенные варианты. Посмотрю что получится проще и удобней сделать.
user6745
новенький
 
Сообщения: 11
Зарегистрирован: 15.01.2021 20:05:25

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 02.03.2021 16:35:12

olegy123 писал(а):Путем изменения прозрачности, оно же альфа канал. 2 картинки у одной альфа=1.0 у другой альфа=0.0, изменения у первой от 1 до 0 - пропадает, у другой 0 до

Хм ! Интересно ! Но есть недостаток прозрачность элементов лазаруса работает не очень надежно + нужно выводить две картинки одну на другой и "молится на систему" надеясь что все будет нормально .
iskander писал(а): если довести до рабочего состояния.

:shock: Blend вполне рабочая и "простая как двери" процедура . :idea: Есть разновидности с "прозрачным" цветом,какой-то там оптимизацией и.т.п. Но я не стал наводить "тень на ясный день" и предложил самую простую.

Добавлено спустя 8 минут 22 секунды:
Снег Север писал(а):Graphics32
https://github.com/graphics32
в комплекте есть демка с блендингом

О интересная штуковина посмотрю на досуге (я такие приблуды коллекционирую ) :idea:
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение iskander » 02.03.2021 17:14:10

Alex2013 писал(а):"простая как двери" процедура

Может она конечно и дверь, но как думаешь, вот такой вызов скомпилируется?
Код: Выделить всё
  Blend(Image1.Picture.Bitmap, Image2.Picture.Bitmap, Image3.Picture.Bitmap, r);
iskander
постоялец
 
Сообщения: 404
Зарегистрирован: 08.01.2012 18:43:34

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 02.03.2021 17:43:17

iskander писал(а):Может она конечно и дверь, но как думаешь, вот такой вызов скомпилируется?

Разумеется скомпилируется! Это кусок вот этого модуля.... (Из проекта "цифровая оптика" )
Последний раз редактировалось Alex2013 02.03.2021 19:40:21, всего редактировалось 4 раз(а).
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение iskander » 02.03.2021 17:54:22

Alex2013 писал(а):Разумеется скомпилируется!

Код: Выделить всё
  main.pas(53,76) Error: Can't take the address of constant expressions

У меня компилятор не той системы?
iskander
постоялец
 
Сообщения: 404
Зарегистрирован: 08.01.2012 18:43:34

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 02.03.2021 17:58:39

iskander писал(а):
Alex2013 писал(а):Разумеется скомпилируется!

Код: Выделить всё
  main.pas(53,76) Error: Can't take the address of constant expressions

У меня компилятор не той системы?

А если внимательно посмотреть то видно что у меня там var стоит.
procedure Blend(var Src1,Src2,Dst: TBitmap; Amount: extended);
Зы
Я уже было подумал, что это я сам опечатался при копировании и чистке от закомментированных блоков. :wink:
Последний раз редактировалось Alex2013 02.03.2021 19:39:00, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение iskander » 02.03.2021 18:15:32

Alex2013 писал(а):А если внимательно посмотреть то видно что у меня там var стоит

Так я о том же, и он там уместен, как зонтик у рыбы.
iskander
постоялец
 
Сообщения: 404
Зарегистрирован: 08.01.2012 18:43:34

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 02.03.2021 18:33:12

iskander писал(а):Так я о том же, и он там уместен, как зонтик у рыбы.

Ну в принципе согласен ... var это артефакт и исходной версии для Кол ..
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение iskander » 02.03.2021 18:38:44

И w и h можно убрать, ибо хлам.
iskander
постоялец
 
Сообщения: 404
Зарегистрирован: 08.01.2012 18:43:34

Re: Плавное изменение картинки в Timage при наведении мышки

Сообщение Alex2013 » 02.03.2021 18:44:55

Добавлено спустя 6 минут 18 секунд:
iskander писал(а):И w и h можно убрать, ибо хлам.

Ок. Но это уже придирки ...
Последний раз редактировалось Alex2013 02.03.2021 19:29:43, всего редактировалось 3 раз(а).
Alex2013
долгожитель
 
Сообщения: 2089
Зарегистрирован: 03.04.2013 11:59:44

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru