Alakzatanimációk alkalmazása prezentációkban C++-val
Bevezetés
Az animációk vizuális effektusok, amelyeket szövegekre, képekre, alakzatokra vagy diagramokra lehet alkalmazni. Életet adnak a prezentációknak vagy annak elemeinek.
Miért használjunk animációkat a prezentációkban?
Az animációk segítségével
- információáramlás irányítása
- fontos pontok kiemelése
- az érdeklődés vagy részvétel növelése a közönség körében
- a tartalom könnyebben olvashatóvá, befogadhatóvá vagy feldolgozhatóvá tétele
- a közönség figyelmének felhívása a prezentáció fontos részeire
A PowerPoint számos beállítást és eszközt biztosít az animációkhoz és az animációs effektusokhoz a belépés, kilépés, kiemelés és mozgáspályák kategóriákban.
Animációk az Aspose.Slides-ban
- Az Aspose.Slides biztosítja az osztályokat és típusokat, melyekre az animációkkal való munkához a Aspose.Slides.Animation névtérben szüksége van,
- Az Aspose.Slides több mint 150 animációs effektust biztosít a EffectType enumerációban. Ezek az effektusok lényegében megegyeznek (vagy ekvivalensek) a PowerPoint-ban használtakkal.
Animáció alkalmazása szövegdobozra
Az Aspose.Slides for C++ lehetővé teszi, hogy animációt alkalmazzon egy alakzat szövegére.
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciaját az indexén keresztül.
- Adjon hozzá egy
rectangleIAutoShape elemet. - Adjon szöveget a IAutoShape.TextFrame elemhez.
- Szerezze meg a fő effektussorozatot.
- Adjon animációs effektust a IAutoShape elemhez.
- Állítsa be a TextAnimation.BuildType tulajdonságot a BuildType Enumeration értékére.
- Írja a prezentációt lemezre PPTX fájlként.
Ez a C++ kód bemutatja, hogyan kell alkalmazni a Fade effektust az AutoShape-re, és beállítani a szöveg animációját a By 1st Level Paragraphs értékre:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
System::SharedPtr<ISlide> sld = pres->get_Slides()->idx_get(0);
// Új AutoShape-et ad hozzá szöveggel
System::SharedPtr<IAutoShape> autoShape =
sld->get_Shapes()->AddAutoShape(Aspose::Slides::ShapeType::Rectangle, 20.0f, 20.0f, 150.0f, 100.0f);
System::SharedPtr<ITextFrame> textFrame = autoShape->get_TextFrame();
textFrame->set_Text(u"First paragraph \nSecond paragraph \n Third paragraph");
// Lekéri a dia fő sorozatát.
System::SharedPtr<ISequence> sequence = sld->get_Timeline()->get_MainSequence();
// Fade animációs effektust ad az alakzathoz
System::SharedPtr<IEffect> effect = sequence->AddEffect(autoShape, Aspose::Slides::Animation::EffectType::Fade,
Aspose::Slides::Animation::EffectSubtype::None, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Az alakzat szövegét az első szintű bekezdések szerint animálja
effect->get_TextAnimation()->set_BuildType(Aspose::Slides::Animation::BuildType::ByLevelParagraphs1);
// Mentse el a PPTX fájlt a lemezre
pres->Save(path + u"AnimText_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Animáció alkalmazása képkeretre
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciaját az indexén keresztül.
- Adjon hozzá vagy szerezze meg a dián a PictureFrame elemet.
- Szerezze meg a fő effektussorozatot.
- Adjon animációs effektust a PictureFrame elemhez.
- Írja a prezentációt lemezre PPTX fájlként.
Ez a C++ kód bemutatja, hogyan kell alkalmazni a Fly effektust egy képkeretre:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
// Betölti a képet, amely a prezentáció képgyűjteményébe lesz hozzáadva
System::SharedPtr<IImage> img = Images::FromFile(u"aspose-logo.jpg");
System::SharedPtr<IPPImage> image = pres->get_Images()->AddImage(img);
// Képkeretet ad hozzá a diához
System::SharedPtr<IPictureFrame> picFrame =
pres->get_Slides()->idx_get(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 50.0f, 50.0f, 100.0f, 100.0f, image);
// Lekéri a dia fő sorozatát.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Balról repülő animációs effektust ad a képkerethez
System::SharedPtr<IEffect> effect = sequence->AddEffect(picFrame, Aspose::Slides::Animation::EffectType::Fly,
Aspose::Slides::Animation::EffectSubtype::Left, Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Mentse el a PPTX fájlt a lemezre
pres->Save(path + u"AnimImage_out.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Animáció alkalmazása alakzatra
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciaját az indexén keresztül.
- Adjon hozzá egy
rectangleIAutoShape elemet. - Adjon hozzá egy
BevelIAutoShape elemet (amikor ezt az objektumot rákattintják, az animáció lejátszásra kerül). - Hozzon létre egy effektussorozatot a bevel alakzaton.
- Hozzon létre egy egyéni
UserPath-ot. - Adjon parancsokat a
UserPath-ra való mozgáshoz. - Írja a prezentációt lemezre PPTX fájlként.
Ez a C++ kód bemutatja, hogyan kell alkalmazni a PathFootball (path football) effektust egy alakzatra:
// A dokumentumkönyvtár elérési útja.
const String outPath = u"../out/AnimationsOnShapes_out.pptx";
const String templatePath = u"../templates/ConnectorLineAngle.pptx";
// Betölti a prezentációt
SharedPtr<Presentation> pres = MakeObject<Presentation>();
// Eléri az első diát
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
// Eléri a kiválasztott dia alakzatgyűjteményét
SharedPtr<IShapeCollection> shapes = slide->get_Shapes();
// Létrehozza a PathFootball effektust a meglévő alakzatra nulláról.
SharedPtr<IAutoShape> ashp = slide->get_Shapes()->AddAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
ashp->AddTextFrame(u"Animated TextBox");
// Hozzáadja a PathFootball animációs effektust
slide->get_Timeline()->get_MainSequence()->AddEffect(ashp, EffectType::PathFootball,
EffectSubtype::None, EffectTriggerType::AfterPrevious);
// Létrehoz egyfajta „gombot”.
SharedPtr<IAutoShape> shapeTrigger = slide->get_Shapes()->AddAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
// Létrehoz egy sorozatot az effektusokból ehhez a gombhoz.
SharedPtr<ISequence> seqInter = slide->get_Timeline()->get_InteractiveSequences()->Add(shapeTrigger);
// Létrehoz egy egyéni felhasználói útvonalat. Az objektum csak a gomb megnyomása után kerül mozgatásra.
SharedPtr<IEffect> fxUserPath = seqInter->AddEffect(ashp, EffectType::PathUser, EffectSubtype::None, EffectTriggerType::OnClick);
// Parancsokat ad hozzá a mozgáshoz, mivel a létrehozott útvonal üres.
SharedPtr<MotionEffect> motionBhv = ExplicitCast<MotionEffect>(fxUserPath->get_Behaviors()->idx_get(0));
//SharedPtr<PointF> point = MakeObject<PointF >(0.076, 0.59);
const PointF point = PointF (0.076, 0.59);
System::ArrayPtr<PointF> pts = System::MakeObject<System::Array<PointF>>(1, point);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts, MotionPathPointsType::Auto, true);
//PointF point2[1] = { -0.076, -0.59 };
const PointF point2 = PointF(-0.076, -0.59 );
System::ArrayPtr<PointF> pts2 = System::MakeObject<System::Array<PointF>>(1, point2);
motionBhv->get_Path()->Add(MotionCommandPathType::LineTo, pts2, MotionPathPointsType::Auto, false);
motionBhv->get_Path()->Add(MotionCommandPathType::End, nullptr, MotionPathPointsType::Auto, false);
// A PPTX fájlt lemezre írja
pres->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptx);
Alakzatra alkalmazott animációs effektusok lekérése
Az alábbi példák megmutatják, hogyan kell használni a GetEffectsByShape metódust a ISequence interfészből, hogy lekérje az alakzatra alkalmazott összes animációs effektust.
Példa 1: Animációs effektusok lekérése egy alakzatra egy normál dián
Korábban megtanulta, hogyan kell animációs effektusokat hozzáadni az alakzatokhoz PowerPoint prezentációkban. Az alábbi minta kód megmutatja, hogyan kell lekérni az első alakzatra az első normál dián a AnimExample_out.pptx prezentációban alkalmazott effektusokat.
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"AnimExample_out.pptx");
SharedPtr<ISlide> firstSlide = presentation->get_Slide(0);
// Gets the main animation sequence of the slide.
SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Gets the first shape on the first slide.
SharedPtr<IShape> shape = firstSlide->get_Shape(0);
// Gets animation effects applied to the shape.
ArrayPtr<SharedPtr<IEffect>> shapeEffects = sequence->GetEffectsByShape(shape);
if (shapeEffects->get_Length() > 0)
{
Console::WriteLine(u"The shape " + shape->get_Name() + u" has " + shapeEffects->get_Length() + u" animation effects.");
}
presentation->Dispose();
Példa 2: Az összes animációs effektus lekérése, beleértve a helyőrzőkből örökölt effektusokat
Ha egy alakzat egy normál dián olyan helyőrzőkkel rendelkezik, amelyek az elrendezés-dián és/vagy a mester-dián találhatók, és animációs effektusok lettek hozzáadva ezekhez a helyőrzőkhöz, akkor az alakzat összes effektusa lejátszásra kerül a diavetítés során, beleértve a helyőrzőkből örökölt effektusokat.
Tegyük fel, hogy van egy sample.pptx nevű PowerPoint prezentációfájlunk, amely egyetlen diát tartalmaz, azon csak egy lábléc alakzatot a „Made with Aspose.Slides” szöveggel, és a Random Bars effektus van alkalmazva az alakzatra.

Tegyük fel továbbá, hogy a Split effektus van alkalmazva a lábléc helyőrzőre az elrendezés dián.

Végül a Fly In effektus van alkalmazva a lábléc helyőrzőre a mester dián.

Az alábbi minta kód megmutatja, hogyan kell használni a GetBasePlaceholder metódust a IShape interfészből az alakzat helyőrzőinek eléréséhez, és az animációs effektusok lekéréséhez, amelyek a lábléc alakzatra vannak alkalmazva, beleértve az elrendezésen és a mesterdián lévő helyőrzőkből örökölt effektusokat.
void PrintEffects(ArrayPtr<SharedPtr<IEffect>> effects)
{
for (SharedPtr<IEffect> effect : effects)
{
Console::WriteLine(String::Format(u"Type: {0}, subtype: {1}", effect->get_Type(), effect->get_Subtype()));
}
}
SharedPtr<Presentation> presentation = MakeObject<Presentation>(u"sample.pptx");
SharedPtr<ISlide> slide = presentation->get_Slide(0);
// Lekéri a normál dián lévő alakzat animációs effektusait.
SharedPtr<IShape> shape = slide->get_Shape(0);
ArrayPtr<SharedPtr<IEffect>> shapeEffects = slide->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);
// Lekéri a helyőrző animációs effektusait az elrendezés dián.
SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);
// Lekéri a helyőrző animációs effektusait a mester dián.
SharedPtr<IShape> masterShape = layoutShape->GetBasePlaceholder();
ArrayPtr<SharedPtr<IEffect>> masterShapeEffects = slide->get_LayoutSlide()->get_MasterSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(masterShape);
presentation->Dispose();
Console::WriteLine(u"Main sequence of shape effects:");
PrintEffects(masterShapeEffects);
PrintEffects(layoutShapeEffects);
PrintEffects(shapeEffects);
Output:
Main sequence of shape effects:
Type: 47, subtype: 2 // Repülés, Alul
Type: 134, subtype: 45 // Szétválás, Függőlegesen be
Type: 126, subtype: 22 // Véletlen csíkok, Vízszintes
Animációs effektus időzítési tulajdonságok módosítása
Az Aspose.Slides for C++ lehetővé teszi az animációs effektus időzítési tulajdonságainak módosítását.
Ez a Animation Timing panel a Microsoft PowerPoint-ben:

Az alábbiak a megfelelések a PowerPoint időzítés és a Effect.Timing tulajdonságok között:
- A PowerPoint Timing Start legördülő lista egyezik a Effect.Timing.TriggerType tulajdonsággal.
- A PowerPoint Timing Duration egyezik a Effect.Timing.Duration tulajdonsággal. Az animáció időtartama (másodpercben) az az összes idő, amely egy ciklus befejezéséhez szükséges.
- A PowerPoint Timing Delay egyezik a Effect.Timing.TriggerDelayTime tulajdonsággal.
Így módosíthatja az Effect Timing tulajdonságokat:
- Alkalmazza (Apply) vagy szerezze meg az animációs effektust.
- Állítson be új értékeket a szükséges Effect.Timing tulajdonságokra.
- Mentse a módosított PPTX fájlt.
Ez a C++ kód bemutatja a műveletet:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Lekéri a dia fő sorozatát.
System::SharedPtr<ISequence> sequence = pres->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence();
// Lekéri a fő sorozat első effektusát.
System::SharedPtr<IEffect> effect = sequence->idx_get(0);
// Módosítja az effektus TriggerType értékét kattintásra indításra
effect->get_Timing()->set_TriggerType(Aspose::Slides::Animation::EffectTriggerType::OnClick);
// Módosítja az effektus időtartamát
effect->get_Timing()->set_Duration(3.f);
// Módosítja az effektus TriggerDelayTime értékét
effect->get_Timing()->set_TriggerDelayTime(0.5f);
// Elmenti a PPTX fájlt a lemezre
pres->Save(u"AnimExample_changed.pptx", Aspose::Slides::Export::SaveFormat::Pptx);
Animációs effektus hang
Az Aspose.Slides a következő tulajdonságokat biztosítja, hogy hangokat kezelhessen animációs effektusokban:
Animációs effektus hang hozzáadása
Ez a C++ kód bemutatja, hogyan kell animációs effektus hangot hozzáadni és leállítani, amikor a következő effektus kezdődik:
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimExample_out.pptx");
// Hangot ad a prezentáció audio gyűjteményéhez
System::SharedPtr<IAudio> effectSound = pres->get_Audios()->AddAudio(System::IO::File::ReadAllBytes(u"sampleaudio.wav"));
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Lekéri a dia fő sorozatát.
System::SharedPtr<ISequence> sequence = firstSlide->get_Timeline()->get_MainSequence();
// Lekéri a fő sorozat első effektusát
System::SharedPtr<IEffect> firstEffect = sequence->idx_get(0);
// Ellenőrzi, hogy az effektusnak nincs hangja
if (!firstEffect->get_StopPreviousSound() && firstEffect->get_Sound() == nullptr)
{
// Hangot ad az első effektushoz
firstEffect->set_Sound(effectSound);
}
// Lekéri a dia első interaktív sorozatát.
System::SharedPtr<ISequence> interactiveSequence = firstSlide->get_Timeline()->get_InteractiveSequence(0);
// Beállítja az effektus "Előző hang leállítása" jelzőjét
interactiveSequence->idx_get(0)->set_StopPreviousSound(true);
// A PPTX fájlt lemezre írja
pres->Save(u"AnimExample_Sound_out.pptx", SaveFormat::Pptx);
Animációs effektus hang kinyerése
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezze meg egy dia referenciaját az indexén keresztül.
- Szerezze meg a fő effektussorozatot.
- Vonja ki a set_Sound() beágyazott hangot minden egyes animációs effektusból.
Ez a C++ kód bemutatja, hogyan kell kinyerni egy animációs effektusba beágyazott hangot:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"EffectSound.pptx");
System::SharedPtr<ISlide> slide = pres->get_Slide(0);
// Lekéri a dia fő sorozatát.
System::SharedPtr<ISequence> sequence = slide->get_Timeline()->get_MainSequence();
for (auto&& effect : sequence)
{
System::SharedPtr<IAudio> sound = effect->get_Sound();
if (sound == nullptr)
continue;
auto audio = sound->get_BinaryData();
}
Animáció után
Az Aspose.Slides for C++ lehetővé teszi, hogy megváltoztassa egy animációs effektus After animation (animáció után) tulajdonságát.
Ez a Animation Effect panel és a kibővített menü a Microsoft PowerPoint-ben:

A PowerPoint Effect After animation legördülő lista egyezik ezekkel a tulajdonságokkal:
- A set_AfterAnimationType() tulajdonság, amely leírja az After animation típust :
- A PowerPoint More Colors egyezik a AfterAnimationType.Color típussal;
- A PowerPoint Don’t Dim listaelem egyezik a AfterAnimationType.DoNotDim típussal (az alapértelmezett after animation típus);
- A PowerPoint Hide After Animation elem egyezik a AfterAnimationType.HideAfterAnimation típussal;
- A PowerPoint Hide on Next Mouse Click elem egyezik a AfterAnimationType.HideOnNextMouseClick típussal;
- A set_AfterAnimationColor() tulajdonság, amely egy after animation színformátumot definiál. Ez a tulajdonság a AfterAnimationType.Color típussal együttműködve működik. Ha a típust másikra módosítja, az after animation szín törlődik.
Ez a C++ kód bemutatja, hogyan kell módosítani egy after animation effektust:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimImage_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Lekéri a fő sorozat első effektusát
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// A animáció után típusát Színre változtatja
firstEffect->set_AfterAnimationType(AfterAnimationType::Color);
// Beállítja az animáció után a sötétítő színt
firstEffect->get_AfterAnimationColor()->set_Color(System::Drawing::Color::get_AliceBlue());
// A PPTX fájlt lemezre írja
pres->Save(u"AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
Szöveg animálása
Az Aspose.Slides a következő tulajdonságokat biztosítja, hogy kezelhesse egy animációs effektus Animate text blokkját:
- A set_AnimateTextType() amely leírja az animált szöveg típusát az effektusban. Az alakzat szövege animálható:
- Egyszerre (AnimateTextType.AllAtOnce típus)
- Szó szerint (AnimateTextType.ByWord típus)
- Betű szerint (AnimateTextType.ByLetter típus)
- A set_DelayBetweenTextParts() beállítja a késleltetést az animált szövegrészek (szavak vagy betűk) között. A pozitív érték a effektus időtartamának százalékát jelöli. A negatív érték a késleltetést másodpercben adja meg.
Így módosíthatja az Effect Animate text tulajdonságokat:
- Alkalmazza (Apply) vagy szerezze meg az animációs effektust.
- Állítsa be a set_BuildType() tulajdonságot a BuildType.AsOneObject értékre, hogy kikapcsolja a By Paragraphs (bekezdésenként) animációs módot.
- Állítson be új értékeket a set_AnimateTextType() és a set_DelayBetweenTextParts() tulajdonságokra.
- Mentse a módosított PPTX fájlt.
Ez a C++ kód bemutatja a műveletet:
// Példányosít egy prezentációs osztályt, amely egy prezentációs fájlt képvisel.
System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"AnimTextBox_out.pptx");
System::SharedPtr<ISlide> firstSlide = pres->get_Slide(0);
// Lekéri a fő sorozat első effektusát
System::SharedPtr<IEffect> firstEffect = firstSlide->get_Timeline()->get_MainSequence()->idx_get(0);
// Módosítja az effektus szöveg animáció típusát "As One Object"
firstEffect->get_TextAnimation()->set_BuildType(BuildType::AsOneObject);
// Módosítja az effektus szöveg animálás típusát "By word"
firstEffect->set_AnimateTextType(AnimateTextType::ByWord);
// Beállítja a szavak közötti késleltetést az effektus időtartamának 20%-ára
firstEffect->set_DelayBetweenTextParts(20.0f);
// A PPTX fájlt lemezre írja
pres->Save(u"AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
GYIK
Hogyan biztosíthatom, hogy az animációk megmaradjanak a prezentáció webre publikálásakor?
Export to HTML5 és engedélyezze a beállításokat, amelyek a shape és transition animációkért felelősek. A sima HTML nem játszik le dián animációkat, míg a HTML5 igen.
Hogyan befolyásolja a z-sorrend (réteg sorrend) módosítása az animációt?
Az animációs és a rajzolási sorrend független egymástól: egy effektus szabályozza a megjelenés/eltűnés időzítését és típusát, míg a z-sorrend meghatározza, hogy mi takarja meg miét. A látható eredményt ezek kombinációja határozza meg. (Ez a PowerPoint általános viselkedése; az Aspose.Slides effektus‑ és alakzat‑modellje ugyanazt a logikát követi.)
Vannak korlátozások az animációk videóvá konvertálásakor bizonyos effektusok esetén?
Általánosságban a animációk támogatottak, de ritka esetekben vagy specifikus effektusok másként jelenhetnek meg. Javasoljuk, hogy tesztelje a használt effektusokkal és a könyvtár verziójával.