Форум: "Начинающим";
Текущий архив: 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