Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.082 c
15-1231656099
vvrz
2009-01-11 09:41
2009.03.15
Delphi и Windows Mobile


2-1232460703
аврам
2009-01-20 17:11
2009.03.15
http cookies


6-1200679020
ad_Wolf
2008-01-18 20:57
2009.03.15
Вопрос по Indy


2-1232644918
markers
2009-01-22 20:21
2009.03.15
Проблема Extended или туплю?


15-1231596394
Slider007
2009-01-10 17:06
2009.03.15
С днем рождения ! 3 января 2009 суббота





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский