анимированная смена Image
Задача такая. Есть два файла JPG загруженных в 2 Image. У них одинаковое разрешение. Image на форме находятся один на другом или неважно. Но нужно чтобы 1 JPG красиво исчезал а 2й красиво появлялся. например как в ПОВЕР ПОИНТЕ выплывание сбоку, из центра, один пропадает другой из под него проявляется. ГИФ и АВИшники не подходят. При изменении размера Image по таймеру, картинка жутко мигает.
Помогите пожалуйста!
Задача такая. Есть два файла JPG загруженных в 2 Image. У них одинаковое разрешение. Image на форме находятся один на другом или неважно. Но нужно чтобы 1 JPG красиво исчезал а 2й красиво появлялся. например как в ПОВЕР ПОИНТЕ выплывание сбоку, из центра, один пропадает другой из под него проявляется. ГИФ и АВИшники не подходят. При изменении размера Image по таймеру, картинка жутко мигает.
Тебе надо писать алгоритмы обработки второго изображения или обоих вместе,
а потом копировать то, что получилось на один!
Image методом CopyRect.
P.S.: Мне например нравится черная маска с узором,
которую я накладываю на первую картинку,
а потом слаживаю ее со второй, но инвертированную
и копирую в режиме вычитания.
Тебе надо писать алгоритмы обработки второго изображения или обоих вместе,
а потом копировать то, что получилось на один!
Image методом CopyRect.
P.S.: Мне например нравится черная маска с узором,
которую я накладываю на первую картинку,
а потом слаживаю ее со второй, но инвертированную
и копирую в режиме вычитания.
Нужно слайд шоу например как в WEBHOTS. Подставляем картинки одну за другой. нужны красивые эфекты замены.
P.S.: А как это черная маска с узором? Есть пример, если можно?
Нужно слайд шоу например как в WEBHOTS. Подставляем картинки одну за другой. нужны красивые эфекты замены.
P.S.: А как это черная маска с узором? Есть пример, если можно?
Тут рассказывай, не рассказывай, а все равно все
не расскажешь:D
Значит так. Чтобы не было мигания когда ты
колбасишь второй Image, учти, что все эффекты делаются на одно картинке, как на видеоповерхности. Назовем эту картинку первичной,
а исходные картинки альфа поверхностями.
Тогда используя всякие там преобразования
можно добиться нужного эффекта на задней картинке
(не видимой), а потом с нее уже копируем на
первичную. Есть множество режимов копирования
у метода CopyRect, но они в основном дублируют
сложение и вычитание. Самое интересное то, что
ты можешь в этот процесс вставить еще и сетку-фильтр, это просто рисунок который мы не увидим,
но контуры которого будет повторять одно из изображений. В качестве такого фильтра можно использовать кисть с маской или картинку.
Кисть с маской не особо эффектное зрелище,
потому что маска размеров 8х8, но если есть
определенный талант то можно сваять что очень
даже симпатишное:)
Другой вариант - это серия картинок
(скорее всего черно-белых) которые рисуются на
задней картинке после одного из изображений,
а после рисуется второе изображение в соответствующем режиме, которое четко попадает на фильтр. Получется этакий салат из двух рисунков.
Изменяя эту картинку-фильтр можно добиться
плавного перехода с эффектами.
{
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, для этого нужно указать область
канвы-цели меньше/больше чем исходной.
Тут рассказывай, не рассказывай, а все равно все
не расскажешь:D
Благодарю за подробный ответ. Для меня это сложновато пойду другим путем.
От мерцания я избавился так
DoubleBuffered = true;
Правда не знаю что это такое.
P.S. Думаю попробовать повер поинт "припаять":)
Благодарю за подробный ответ. Для меня это сложновато пойду другим путем.
От мерцания я избавился так
DoubleBuffered = true;
Правда не знаю что это такое.
P.S. Думаю попробовать повер поинт "припаять":)
Просто класс:D
Если ты хоть чуть-чуть понимаешь,
что происходит, когда ты задаешь
DoubleBuffered = true;
то, то что я написал - сущий пустяк ;)
Просто класс:D
Если ты хоть чуть-чуть понимаешь,
что происходит, когда ты задаешь
DoubleBuffered = true;
то, то что я написал - сущий пустяк ;)
Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел
Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел
Интересно,а почему это девушка пишет от мужского лица? Подозрительно
Интересно,а почему это девушка пишет от мужского лица? Подозрительно
Угу8)
Я честно не понимаю и буду весьма благодарен если кто нибудь раскажет. хотябы приблизительно. я это в форуме на исходниках нашел
Опять таки, все информацию от компонентах
можно получить только у производителя!
Если нет, то лезем в 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;
Интересно,а почему это девушка пишет от мужского лица? Подозрительно
А я от женского вроде бы и не писал, ник как ник
Вот, все просто.:) Недостатком двойной буферизации является увеличенный расход памяти.
В примечании говорится о том, что если объект
участвует в Drag&Dock, то его DoubleBuffere=true;
Благодарю за твой ответ и ответы. Больше мне даже нечего спросить по этой теме. В общем как разработаю пару эффектов где нибудь здесь покажу. Буду благодарен если кто нибудь поделится готовыми эффектами если они есть. Пишите.