Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Плавный переход   Найти похожие ветки 

 
CodeMaster ©   (2009-01-23 22:40) [0]

Здраствуйте мастера! Не подскажите алгоритм плавного перехода одного изображения в другое? Пытался в Интернете найти информацию по этой теме, но ничего не нашёл. Только два примера с очень долгой обработкой.


 
KilkennyCat ©   (2009-01-23 23:24) [1]

Смотря что имеется ввиду. Если морфинг, то я - пас. На эту тему можно информации на хорошую книгу написать. Ну а если что-то типа эффекта FadeIn+FadeOut - это легко.


 
CodeMaster ©   (2009-01-24 12:10) [2]

Да мне как раз нужен морфинг


 
Михаил   (2009-01-24 13:39) [3]

ну яркость изображения уменьшай, а второго увеличивай вот и все


 
@!!ex ©   (2009-01-24 15:11) [4]

Color = Color1*(i-1)+Color2*i
где i от 0 до 1.


 
@!!ex ©   (2009-01-24 15:11) [5]

ой...
1-i


 
@!!ex ©   (2009-01-24 15:17) [6]

если это OpenGL или Direct3D, то можно делать это в шейдере, что будет быстро.
или две картинки рисовать с альфой. Тогда цвета трогать не надо.

Если делать на Кэнвасе, то и сканлайн не даст гигантской скорости.


 
KilkennyCat ©   (2009-01-24 15:52) [7]


> Михаил  


> @!!ex ©   (24.01.09 15:11) [4]

Это не морфинг.

морфинг - это, например, плавное изменение, перетакание круга в квадрат. Более-менее легко реализуется в векторной графике.


 
@!!ex ©   (2009-01-24 15:59) [8]

> [7] KilkennyCat ©   (24.01.09 15:52)

Ответил так, как понял. :)
Как только автор адекватно объяснет чего хочет, тогда по другому отвечу. :))


 
KilkennyCat ©   (2009-01-24 16:04) [9]


> @!!ex ©   (24.01.09 15:59) [8]

Дык он вроде и ответил на мое уточнение... как я понял :)


 
@!!ex ©   (2009-01-24 16:09) [10]

> [9] KilkennyCat ©   (24.01.09 16:04)

Если автор сам понимает, что значит слово морфинг. :))


 
CodeMaster ©   (2009-01-24 19:36) [11]

Эффект морфинга - плавное перетекание одного в другое


 
CodeMaster ©   (2009-01-24 19:36) [12]

Наверняка кто то видел такую реализация в AIMP. Меня интересует эта же реализация


 
KilkennyCat ©   (2009-01-24 22:11) [13]


> CodeMaster ©   (24.01.09 19:36) [12]

я не видел. я даже плохо помню, что это за прога... что-то типа мессенджера? Будет проще, если нарисуете пару-тойку картинок и покажете. Типа, исходная, промежуточная и конечная стадии.


 
CodeMaster ©   (2009-01-24 22:46) [14]

Вот посмотри мою реализацию она очень медленная.
http://www.wgteam.ucoz.kz/POGi4-Bugs.rar

P.S чтобы увидеть эффект наведите курсор на кнопку Play или на другие элементы управления.


 
KilkennyCat ©   (2009-01-24 22:50) [15]

посмотрю.. чуть позже, ночью. у меня на машине кроме виндов - ничего... даже архиватора нет.


 
KilkennyCat ©   (2009-01-24 23:18) [16]


> CodeMaster ©   (24.01.09 22:46) [14]

Приложению не удалось запуститься, поскольку MSVCP71.DLL не был найден


 
@!!ex ©   (2009-01-24 23:24) [17]

> [15] KilkennyCat ©   (24.01.09 22:50)

Вот я готов сто баксов поставить на то, что автор не то имеет ввиду под морфингом, что вы.
И кстати он тоже будет прав. Поскольку то что я описал - тоже морфинг.


 
antonn ©   (2009-01-24 23:30) [18]

в плеере fade


 
Anatoly Podgoretsky ©   (2009-01-24 23:30) [19]

@!!ex ©   (24.01.09 23:24) [17]
Это не морфинг


 
@!!ex ©   (2009-01-24 23:34) [20]

> [19] Anatoly Podgoretsky ©   (24.01.09 23:30)

определение морфинга из гугла: "преобразование одного объекта в другой"
А теперь расскажите почему то что я описал не подходит под это определение? Там вполне четко преобразуется один цвет в другое.


 
KilkennyCat ©   (2009-01-25 00:16) [21]

мда.


 
Anatoly Podgoretsky ©   (2009-01-25 00:24) [22]

> @!!ex  (24.01.2009 23:34:20)  [20]

преобразование формы


 
KilkennyCat ©   (2009-01-25 00:59) [23]

Оффтопом, но...
POG-iMP (Demo Beta 2) - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.

И это на чистой XP SP3 Proff.


 
@!!ex ©   (2009-01-25 07:44) [24]

> [23] KilkennyCat ©   (25.01.09 00:59)

Собрана она с дебаговыми внешними dll.


 
codemaster ©   (2009-01-25 10:18) [25]

Разобрался с проблемой MSVCP71.DLL.
Вот новая ссылка: http://www.wgteam.ucoz.kz/PMP4.rar


 
@!!ex ©   (2009-01-25 10:55) [26]

> [25] codemaster ©   (25.01.09 10:18)

ровно то, что я описал в [4]


 
CodeMaster ©   (2009-01-25 11:00) [27]

Алгоритм вот такой:
procedure TPOGiButton.Morphing(Bm1,Bm2: TBitmap);
const
 count = 250;
var
 i: integer;
 x, y: integer;
 bm: TBitMap;
 p1, p2, p: PByteArray;

begin
 bm := TBitMap.Create;

Bm.Width:= FrameWidth;
Bm.Height:= FrameHeight;
 bm.PixelFormat := pf24bit;
  bm1.PixelFormat := pf24bit;
    bm2.PixelFormat := pf24bit;

     Canvas.Draw(0,0,bm1);
 for i := 1 to count - 1 do
 begin
   for y := 0 to bm.Height - 1 do
   begin
     p := bm.ScanLine[y];
     p1 := bm1.ScanLine[y];
     p2 := bm2.ScanLine[y];
     for x := 0 to bm.Width * 3 - 1 do
       p^[x] := round((p1^[x] * (count - i) + p2^[x] * i) / count);
   end;

    Application.ProcessMessages;
             Canvas.Draw(0,0,bm);
   Application.ProcessMessages;
   if Application.Terminated then
     break;
 end;
    Canvas.Draw(0,0,bm2);

 bm.Destroy;
end;


 
CodeMaster ©   (2009-01-25 11:01) [28]

Есть ли способ реализовать это пошустрее?


 
antonn ©   (2009-01-25 14:32) [29]

медленно работает? :)


 
KilkennyCat ©   (2009-01-25 15:00) [30]


> antonn ©   (25.01.09 14:32) [29]

Может, не будете издеваться? Это же не в Ваших правилах.


 
KilkennyCat ©   (2009-01-25 15:03) [31]


> CodeMaster ©   (25.01.09 11:01) [28]

http://www.delphiarea.com/ там есть некий компонет, TPicShow. Если мне не изменяет память с исходниками, где довольно неплохо написаны эффекты.


 
CodeMaster ©   (2009-01-25 15:42) [32]

Спасибо


 
antonn ©   (2009-01-25 15:51) [33]


> KilkennyCat ©   (25.01.09 15:00) [30]
>
>
> > antonn ©   (25.01.09 14:32) [29]
>
> Может, не будете издеваться? Это же не в Ваших правилах.
>

Ни разу не издевка. Возможно автору не нравится секундная загрузка cpu, вызваная понятно чем. А возможно у него экран в 16bit. Еще много чего возможно, но очевидно только тем, кто имеет представление о сабже.
Хочешь укусить - сначала подумай.


 
CodeMaster ©   (2009-01-25 16:10) [34]

procedure Effect119(Display, Image: TBitmap; W, H, X, Y, Progress: Integer);
var
 dstPixel, srcPixel: PRGBQuad;
 Weight: Integer;
 I: Integer;
begin
 srcPixel := Image.ScanLine[H - 1];
 dstPixel := Display.ScanLine[H - 1];
 Weight := MulDiv(256, Progress, 100);
 for I := (W * H) - 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;

Извлёк вот этот алгоритм, только не пойму как его присобачить.


 
KilkennyCat ©   (2009-01-25 16:14) [35]


> antonn ©   (25.01.09 15:51) [33]


Ну что Вы, Антон Андреевич, как можно кусать Вас! Я просто хотел обратить Ваше внимание, что автор не единожды жаловался на скорость, вот и подумал, что может быть, Ваше ценное замечание несколько излишне? Но Вы мне снова все разъяснили. Спасибо! Извините.


 
KilkennyCat ©   (2009-01-25 16:17) [36]


> СodeMaster ©   (25.01.09 16:10) [34]


Что именно там непонятного?


 
CodeMaster ©   (2009-01-25 16:20) [37]

Как вот этот алгоритм в мою программу поставить.. ??
Подстроил под себя вот так
procedure TPOGiButton.Morphing(Bm1,Bm2: TBitmap; progress: Integer);
var
 dstPixel, srcPixel: PRGBQuad;
 Weight: Integer;
 I: Integer;
begin
 srcPixel := Bm2.ScanLine[Bm2.Height - 1];
 dstPixel := Bm1.ScanLine[Bm1.Height - 1];
 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;

Использую вот так    
for i:= 1 to 100 do  begin

  Morphing(bm1,Bm2,i);
  Canvas.Draw(0,0,bm1);
end;
И ничего не работает


 
antonn ©   (2009-01-25 16:22) [38]


> KilkennyCat ©   (25.01.09 16:14) [35]
>
>

ну не укусил, не получается у тебя :)
скорость - это такое растяжимое понятие, каждый его меряет по своему - кто то в тиках в секунду, кто то в нагрузке на cpu...
Пожалуйста. Извиняю :)


> CodeMaster ©   (25.01.09 16:10) [34]

Передавай два битмапа (первый который выводится на экран, второй исходный, их размеры и координаты вывода).
Могу порекомендовать не выводить все 255 кадров если они рисуются в течении 1 секунды, все равно человек все не усвоит, можно рисовать ну.. 30 кадров, экономия немалая.
И еще раз повторюсь - как выражается недостаточность скорости? и какой процессор?


 
CodeMaster ©   (2009-01-25 16:25) [39]

Intel Core 2 Duo 2.67 GHz 1333 FSB

Недостаточность заключается в том что на слабеньких компьютерах эта операция занимает очень много времени


 
antonn ©   (2009-01-25 16:29) [40]

Тут неправильный подход.
Нужно не в цикле рисовать 255 картинок, ожидая пока все "продавит", а таймером с малой задержкой рисовать лишь часть кадров (ну как выше сказано штук 30). Тогда анимация будет одинаково длиться по времени на любых компьютерах (исключая древноту типа P166, разумеется)



Страницы: 1 2 вся ветка

Текущий архив: 2009.03.15;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.038 c
15-1231874644
oxffff
2009-01-13 22:24
2009.03.15
Рекомендую. Copy-on-write data structures in Delphi


2-1232820382
AlexDan
2009-01-24 21:06
2009.03.15
Оформление PageControl..


15-1231493354
Vainuu
2009-01-09 12:29
2009.03.15
Экзамен!!!!


11-1197833483
Dodfr
2007-12-16 22:31
2009.03.15
getting size of compiled delphi code blocks ?


3-1216356871
Zergost
2008-07-18 08:54
2009.03.15
Работа со связями в Delphi база MS SQL