Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2011, 16:12   #1
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию Плавный переход между картинками

Здравствуйте, у меня на форме есть кнопки, при щелчке на которые в image должна грузиться определенная картинка. Как можно добиться плавного перехода между последующими картинками?

P.S на jquery делается так
Код:
$('#fade').cycle({ 
    fx:      'fade', 
    speed:    1000, 
    timeout:  2000
});
а вот как в делфи я не знаю.

P.P.S таймером грузить не предлагать, а то я замучаюсь рисовать около 5000 картинок
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 29.05.2011, 20:26   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

можно потоком, но лучше таймером.
и работать со сканлайном
ZuBy вне форума Ответить с цитированием
Старый 30.05.2011, 02:51   #3
~Psycho~
Пользователь
 
Аватар для ~Psycho~
 
Регистрация: 11.12.2010
Сообщений: 44
По умолчанию

Я с помощью AlphaBlend выкручивался (щас точно и не вспомню код) но принцип таков:
Делал 2 формы - одна фоном идет, а на второй image, её прозрачность и менял с помощью 2х таймеров.
В момент переключения таймеров, с одного на другой, загружал картинку
Геммор имхо но мне заняться тогда нечем было
Отражаю отношение к себе
~Psycho~ вне форума Ответить с цитированием
Старый 30.05.2011, 04:03   #4
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Цитата:
Сообщение от ~Psycho~ Посмотреть сообщение
Я с помощью AlphaBlend выкручивался (щас точно и не вспомню код) но принцип таков:
Делал 2 формы - одна фоном идет, а на второй image, её прозрачность и менял с помощью 2х таймеров.
В момент переключения таймеров, с одного на другой, загружал картинку
Геммор имхо но мне заняться тогда нечем было
Причем тут новая форма? Все действия должны происходить в пределах одного окна. Может кто знает, а есть ли готовый компонент по типу image, только с возможностью изменения прозрачности?
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 30.05.2011, 08:26   #5
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

про готовые компоненты ничего не подскажу, но могу сказать одно: стандартными средствами GDI прозрачности не добьёшься, нужно будет писать собственный код для вычисления значений каждого пикселя. если не хочется возиться, смотри в сторону GdiPlus - вот в нём уже есть всё необходимое.
maxionans вне форума Ответить с цитированием
Старый 30.05.2011, 08:41   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Код:
procedure TZMSButton.Morphing(Bm1, Bm2: TBitmap; Progress: Integer);
var
  dstPixel, srcPixel: PRGBQuad;
  Weight: Integer;
  I: Integer;
begin
  if (Assigned(Bm1) and Assigned(Bm2)) then
  begin
    Bm1.PixelFormat := pf32bit;
    Bm2.PixelFormat := pf32bit;
    srcPixel := Bm2.ScanLine[Bm2.Height - 1];
    dstPixel := Bm1.ScanLine[Bm1.Height - 1];
    Progress := 100 - Progress;
    Weight := MulDiv(256, Progress, 100);
    for I := (Bm1.Width * Bm1.Height) - 1 downto 0 do
    begin
      with dstPixel^ do
      begin
        Inc(rgbRed, (Weight * (srcPixel^.rgbRed - rgbRed)) shr 8);
        Inc(rgbGreen, (Weight * (srcPixel^.rgbGreen - rgbGreen)) shr 8);
        Inc(rgbBlue, (Weight * (srcPixel^.rgbBlue - rgbBlue)) shr 8);
      end;
      Inc(srcPixel);
      Inc(dstPixel);
    end;
  end;
end;
вот код плавного перехода картинок
ZuBy вне форума Ответить с цитированием
Старый 31.05.2011, 14:08   #7
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Всем спасибо за помощь! ZuBy, не совсем понял как использовать процедуру, покажите на примере плз.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 01.06.2011, 14:35   #8
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

morphing(bmpSource, bmpDest, 50);
bmpSource на рисуется поверх bmpDest с 50-тью процентной прозрачностью
ZuBy вне форума Ответить с цитированием
Старый 01.06.2011, 15:56   #9
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

А если картинка формата *.png, *.jpg, *.gif? Переводить в нужный формат и "запихивать" в переменную?? Или же все таки посмотреть в сторону GdiPlus???
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 01.06.2011, 17:33   #10
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

"Переводить" в нужный формат, ток запомни TBitmap.PixelFormat должен быть !всегда! pf32bit
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход между компонентами UnChanter Помощь студентам 2 11.01.2010 01:08
Отступы между картинками и дивом Великий Саша HTML и CSS 4 20.11.2009 11:19
Щели в IE между картинками sdm98 HTML и CSS 2 05.10.2009 10:49
Переход между формами(( Lemo Общие вопросы Delphi 6 31.01.2009 22:06
Переход между компонентами stepchild Общие вопросы Delphi 5 29.05.2008 20:07