Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

анимированная смена Image

12K
04 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Помогите пожалуйста!
Задача такая. Есть два файла JPG загруженных в 2 Image. У них одинаковое разрешение. Image на форме находятся один на другом или неважно. Но нужно чтобы 1 JPG красиво исчезал а 2й красиво появлялся. например как в ПОВЕР ПОИНТЕ выплывание сбоку, из центра, один пропадает другой из под него проявляется. ГИФ и АВИшники не подходят. При изменении размера Image по таймеру, картинка жутко мигает.
2.0K
04 августа 2005 года
WidowMaker
212 / / 05.04.2005
Цитата:
Originally posted by VikaZemnova
Помогите пожалуйста!
Задача такая. Есть два файла JPG загруженных в 2 Image. У них одинаковое разрешение. Image на форме находятся один на другом или неважно. Но нужно чтобы 1 JPG красиво исчезал а 2й красиво появлялся. например как в ПОВЕР ПОИНТЕ выплывание сбоку, из центра, один пропадает другой из под него проявляется. ГИФ и АВИшники не подходят. При изменении размера Image по таймеру, картинка жутко мигает.


Тебе надо писать алгоритмы обработки второго изображения или обоих вместе,
а потом копировать то, что получилось на один!
Image методом CopyRect.

P.S.: Мне например нравится черная маска с узором,
которую я накладываю на первую картинку,
а потом слаживаю ее со второй, но инвертированную
и копирую в режиме вычитания.

12K
04 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Цитата:
Originally posted by WidowMaker
Тебе надо писать алгоритмы обработки второго изображения или обоих вместе,
а потом копировать то, что получилось на один!
Image методом CopyRect.

P.S.: Мне например нравится черная маска с узором,
которую я накладываю на первую картинку,
а потом слаживаю ее со второй, но инвертированную
и копирую в режиме вычитания.



Нужно слайд шоу например как в WEBHOTS. Подставляем картинки одну за другой. нужны красивые эфекты замены.
P.S.: А как это черная маска с узором? Есть пример, если можно?

2.0K
05 августа 2005 года
WidowMaker
212 / / 05.04.2005
Цитата:
Originally posted by VikaZemnova
Нужно слайд шоу например как в WEBHOTS. Подставляем картинки одну за другой. нужны красивые эфекты замены.
P.S.: А как это черная маска с узором? Есть пример, если можно?



Тут рассказывай, не рассказывай, а все равно все
не расскажешь:D

Значит так. Чтобы не было мигания когда ты
колбасишь второй Image, учти, что все эффекты делаются на одно картинке, как на видеоповерхности. Назовем эту картинку первичной,
а исходные картинки альфа поверхностями.
Тогда используя всякие там преобразования
можно добиться нужного эффекта на задней картинке
(не видимой), а потом с нее уже копируем на
первичную. Есть множество режимов копирования
у метода CopyRect, но они в основном дублируют
сложение и вычитание. Самое интересное то, что
ты можешь в этот процесс вставить еще и сетку-фильтр, это просто рисунок который мы не увидим,
но контуры которого будет повторять одно из изображений. В качестве такого фильтра можно использовать кисть с маской или картинку.
Кисть с маской не особо эффектное зрелище,
потому что маска размеров 8х8, но если есть
определенный талант то можно сваять что очень
даже симпатишное:)
Другой вариант - это серия картинок
(скорее всего черно-белых) которые рисуются на
задней картинке после одного из изображений,
а после рисуется второе изображение в соответствующем режиме, которое четко попадает на фильтр. Получется этакий салат из двух рисунков.
Изменяя эту картинку-фильтр можно добиться
плавного перехода с эффектами.

 
Код:
void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
X--;
//MultipImage->Canvas->CopyMode=cmSrcAnd;
MultipImage->Canvas->Draw(X,0,FirstImage->Picture->Graphic);
//MultipImage->Canvas->CopyMode=cmSrcCopy;
MultipImage->Canvas->Draw(X+xsize,0,SecondImage->Picture->Graphic);
}


это простейший пример плавного движения;
если снимешь комментарии, то первая картинка будет
коряво(но просто) ищезать.

Но это косвенные методы. Лучше конечно "приклеить"
к приложению PowerPoint или плагины (если б я еще знал как это делается:().


З.Ы.: Совсем забыл, изменять размеры картинки
можно и CopyRect, для этого нужно указать область
канвы-цели меньше/больше чем исходной.
12K
05 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Цитата:
Originally posted by WidowMaker
Тут рассказывай, не рассказывай, а все равно все
не расскажешь:D



Благодарю за подробный ответ. Для меня это сложновато пойду другим путем.
От мерцания я избавился так
DoubleBuffered = true;
Правда не знаю что это такое.

P.S. Думаю попробовать повер поинт "припаять":)

2.0K
05 августа 2005 года
WidowMaker
212 / / 05.04.2005
Цитата:
Originally posted by VikaZemnova
Благодарю за подробный ответ. Для меня это сложновато пойду другим путем.
От мерцания я избавился так
DoubleBuffered = true;
Правда не знаю что это такое.

P.S. Думаю попробовать повер поинт "припаять":)


Просто класс:D
Если ты хоть чуть-чуть понимаешь,
что происходит, когда ты задаешь
DoubleBuffered = true;
то, то что я написал - сущий пустяк ;)

12K
05 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Цитата:
Originally posted by WidowMaker
Просто класс:D
Если ты хоть чуть-чуть понимаешь,
что происходит, когда ты задаешь
DoubleBuffered = true;
то, то что я написал - сущий пустяк ;)


Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел

406
06 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by VikaZemnova
Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел



Интересно,а почему это девушка пишет от мужского лица? Подозрительно

2.0K
06 августа 2005 года
WidowMaker
212 / / 05.04.2005
Цитата:
Originally posted by vitaly2003s
Интересно,а почему это девушка пишет от мужского лица? Подозрительно


Угу8)

2.0K
06 августа 2005 года
WidowMaker
212 / / 05.04.2005
Цитата:
Originally posted by VikaZemnova
Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел


Опять таки, все информацию от компонентах
можно получить только у производителя!
Если нет, то лезем в help и читаем:

Determines whether the control’s image is rendered directly to the window or painted to an in-memory bitmap first.

__property bool DoubleBuffered = {read=FDoubleBuffered, write=FDoubleBuffered, nodefault};

Description

When DoubleBuffered is false, the windowed control paints itself directly to the window. When DoubleBuffered is true, the windowed control paints itself to an in-memory bitmap that is then used to paint the window. Double buffering reduces the amount of flicker when the control repaints, but is more memory intensive.

When a windowed control is a dock site and has an associated dock manager, it must be double-buffered.


Т.е. Когда DoubleBuffered=false, перерисовка
компонентов на экране происходит
на "экране"(т.е. сразу на контексте окна), поэтому
если объект перерисовки большой и трудно рисуем
("перекареженые" картинки и т.п.) мы наблюдаем на экране процесс рисования, причем Wind'a не успевает за один или два цикла обновления
нарисовать этот кусок, отсюда и серые полосы и
мерцания.

Когда мы устанавливаем DoubleBuffered=false,
то выделяем память в которую будет производиться
рисования компонента, и только ПОСЛЕ окончания
его рисования в буфере его скопируют на оконную поверхность. Все это время будет рисоваться
"старое" окно.

Вот, все просто.:) Недостатком двойной буферизации является увеличенный расход памяти.

В примечании говорится о том, что если объект
участвует в Drag&Dock, то его DoubleBuffere=true;

12K
06 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Цитата:
Originally posted by vitaly2003s
Интересно,а почему это девушка пишет от мужского лица? Подозрительно


А я от женского вроде бы и не писал, ник как ник

12K
06 августа 2005 года
VikaZemnova
6 / / 04.08.2005
Цитата:
Originally posted by WidowMaker

Вот, все просто.:) Недостатком двойной буферизации является увеличенный расход памяти.

В примечании говорится о том, что если объект
участвует в Drag&Dock, то его DoubleBuffere=true;


Благодарю за твой ответ и ответы. Больше мне даже нечего спросить по этой теме. В общем как разработаю пару эффектов где нибудь здесь покажу. Буду благодарен если кто нибудь поделится готовыми эффектами если они есть. Пишите.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог