Prezentációs diák képekké konvertálása C++-ban

Bevezetés

Az Aspose.Slides for C++ képes megjeleníteni egyedi diákot PowerPoint és OpenDocument bemutatókból PNG, JPEG, GIF, TIFF és más képformátumokban.

A dia képpé konvertálásához kövesse az alábbi lépéseket:

  1. Töltse be a prezentációt a Presentation osztállyal.
  2. Válassza ki a megjeleníteni kívánt diát.
  3. Szükség esetén konfigurálja a renderelést a RenderingOptions vagy a TiffOptions osztállyal.
  4. Hívja meg a ISlide::GetImage metódust. Ez egy IImage objektumot ad vissza.
  5. Hívja meg az IImage::Save metódust, és adja meg a kimeneti formátumot egy ImageFormat értékkel.

Dia konvertálása PNG képpé

A legegyszerűbb konvertálás az alapértelmezett renderelési beállításokat használja. Az eredményül kapott IImage objektum memóriában feldolgozható vagy fájlba menthető.

Az alábbi C++ példa rendereli az első diát, és PNG képként menti el:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage();
image->Save(u"Slide_0.png", ImageFormat::Png);

image->Dispose();
presentation->Dispose();

Dia(k) konvertálása egyedi méretű képekké

Használja a ISlide::GetImage túlterhelést, amely egy Size értéket fogad, hogy a diát pontos pixelmérettel renderelje.

Az alábbi példa 1820 × 1040 méretű JPEG képet hoz létre:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::Drawing;

Size imageSize(1820, 1040);

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(imageSize);
image->Save(u"Slide_0.jpg", ImageFormat::Jpeg);

image->Dispose();
presentation->Dispose();

Dia(k) konvertálása képekké jegyzetekkel és megjegyzésekkel

Alapértelmezés szerint a diaképek nem tartalmazzák a jegyzeteket vagy megjegyzéseket. Rendeljen egy NotesCommentsLayoutingOptions objektumot a RenderingOptions::set_SlidesLayoutOptions metódushoz, hogy szabályozza, hol jelenjenek meg a jegyzetek és megjegyzések.

Az alábbi példa a levágott jegyzeteket a dia alá, a megjegyzéseket pedig jobbra helyezi:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/CommentsPositions.h>
#include <Export/NotesCommentsLayoutingOptions.h>
#include <Export/NotesPositions.h>
#include <Export/RenderingOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/color.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;

float scaleX = 2.0f;
float scaleY = scaleX;

auto layoutOptions = MakeObject<NotesCommentsLayoutingOptions>();
layoutOptions->set_NotesPosition(NotesPositions::BottomTruncated);
layoutOptions->set_CommentsPosition(CommentsPositions::Right);
layoutOptions->set_CommentsAreaWidth(500);
layoutOptions->set_CommentsAreaColor(Color::get_AntiqueWhite());

auto renderingOptions = MakeObject<RenderingOptions>();
renderingOptions->set_SlidesLayoutOptions(layoutOptions);

auto presentation = MakeObject<Presentation>(u"Presentation_with_notes_and_comments.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(renderingOptions, scaleX, scaleY);
image->Save(u"Image_with_notes_and_comments_0.gif", ImageFormat::Gif);

image->Dispose();
presentation->Dispose();

Dia(k) konvertálása képekké TIFF beállítások használatával

A TiffOptions osztály lehetővé teszi a renderelt TIFF kép méretének, felbontásának és egyéb tulajdonságainak szabályozását.

Az alábbi példa az első diát 2160 × 2880 méretű, 300 DPI felbontású TIFF képként rendereli:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <Export/TiffOptions.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <drawing/size.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;

auto tiffOptions = MakeObject<TiffOptions>();
tiffOptions->set_ImageSize(Size(2160, 2880));
tiffOptions->set_DpiX(300);
tiffOptions->set_DpiY(300);

auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto slide = presentation->get_Slide(0);

auto image = slide->GetImage(tiffOptions);
image->Save(u"output.tiff", ImageFormat::Tiff);

image->Dispose();
presentation->Dispose();

Az összes dia képekké konvertálása

Iteráljon a dia gyűjteményén, hogy az egész prezentációt képsorozattá konvertálja. A rejtett diák is belekerülnek, hacsak nem hagyja ki őket kifejezetten.

Az alábbi példa minden diát JPEG képként renderel, a vízszintes és függőleges méretezési tényezőkkel 2:

#include <DOM/ISlide.h>
#include <DOM/ISlideCollection.h>
#include <DOM/Presentation.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/smart_ptr.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace System;

float scaleX = 2.0f;
float scaleY = scaleX;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");

int32_t slideCount = presentation->get_Slides()->get_Count();
for (int32_t index = 0; index < slideCount; index++)
{
    auto slide = presentation->get_Slide(index);
    auto image = slide->GetImage(scaleX, scaleY);
    image->Save(String::Format(u"Slide_{0}.jpg", index), ImageFormat::Jpeg);
    image->Dispose();
}

presentation->Dispose();

Enhanced Metafile (EMF) létrehozása

Az Enhanced Metafile (EMF) akkor hasznos, ha vektoros grafikát kell cserélni a Microsoft Office‑szal vagy más, Windows metafájlokat támogató Windows alkalmazásokkal. A pixel alapú képekhez képest egy EMF megmaradhatja a vektoros rajzolási műveleteket, amelyek méretezése nem jár olyan mértékű élességveszteséggel. Az EMF azonban elsősorban kompatibilitási formátum Windows metafájl támogatással rendelkező alkalmazások számára, nem pedig univerzális csereformátum. Továbbá a komplex diatartalom, például bitmap képek és egyes hatások, vektor metafájl tárolóban raszter elemekként tárolhatók.

Dia exportálása EMF‑be

A ISlide::WriteAsEmf metódus egy ISlide objektumot EMF formátumban egy cél streambe ír. Az alábbi példa betölt egy prezentációt, kiválasztja az első diát, és egy EMF fájl streambe írja:

#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <system/io/file.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;

auto presentation = MakeObject<Presentation>(u"Presentation.pptx");
auto slide = presentation->get_Slide(0);

auto emfStream = File::Create(u"Slide_0.emf");
slide->WriteAsEmf(emfStream);

emfStream->Close();
presentation->Dispose();

A hívó tulajdonolja a ISlide::WriteAsEmf metódusnak átadott streamet, és be kell zárnia vagy el kell pusztítania. Az Aspose.Slides a stream aktuális pozíciójában ír, és a streamet nyitva hagyja.

SVG kép konvertálása EMF‑be és hozzáadása a prezentációhoz

Használja a ISvgImage::WriteAsEmf metódust az SVG tartalom EMF‑re konvertálásához. A kapott bájtok a IImageCollection::AddImage segítségével hozzáadhatók a prezentációhoz, és egy diára a IShapeCollection::AddPictureFrame metódussal helyezhetők el.

Az alábbi példa egy SvgImage objektumot hoz létre SVG markupból, memóriában EMF‑re konvertálja, az első diára helyezi be a metafájlt, és elmenti a prezentációt:

#include <DOM/IImageCollection.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <DOM/SvgImage.h>
#include <Export/SaveFormat.h>
#include <system/io/memory_stream.h>
#include <system/smart_ptr.h>
#include <system/string.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;

String svgContent = u"<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
auto svgImage = MakeObject<SvgImage>(svgContent);

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);

auto emfStream = MakeObject<MemoryStream>();
svgImage->WriteAsEmf(emfStream);

auto emfData = emfStream->ToArray();
auto image = presentation->get_Images()->AddImage(emfData);
slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20, 20, 200, 100, image);

presentation->Save(u"Presentation_with_emf.pptx", SaveFormat::Pptx);

emfStream->Close();
presentation->Dispose();

A ISvgImage::WriteAsEmf nem veszi át a cél stream tulajdonjogát. Írás után a stream pozíciója a generált adat vége. A példa a MemoryStream::ToArray metódust hívja a teljes puffer lekéréséhez a stream aktuális pozíciójától függetlenül, majd ezt a byte tömböt adja át a IImageCollection::AddImage metódusnak. Hagyja a streamet nyitva, amíg a fogyasztó be nem fejezte a olvasást, majd ezután zárja be.

Az EMF generálás elérhető az Aspose.Slides for C++ által támogatott operációs rendszereken, de a renderelés platformonként eltérhet, ha betűtípusok vagy natív grafikai függőségek hiányoznak. Telepítse a forrás tartalom által használt betűtípusokat, vagy állítson be megfelelő helyettesítéseket, kövesse az Aspose.Slides for C++ platformkövetelményeket, és ellenőrizze az eredményt a cél EMF‑fogyasztó alkalmazásban. A Linux és macOS alkalmazások gyakran korlátozott vagy nem konzisztens támogatással rendelkeznek a Windows metafájlok megjelenítésére és szerkesztésére.

Színes Emoji renderelés

GYIK

Támogatja-e az Aspose.Slides a diaok animációval történő renderelését?

Nem. A ISlide::GetImage metódus a dia statikus képét rendereli, és nem exportál animációkat.

Exportálhatók-e a rejtett diák képekként?

Igen. A rejtett diák ugyanúgy renderelhetők, mint a normál diák. Vegye őket fel a feldolgozási ciklusba, ahogy a fenti példában látható.

Megmaradnak-e az árnyékok és egyéb hatások a dia képekben?

Igen. Az Aspose.Slides árnyékokat, átlátszóságot és egyéb támogatott grafikai hatásokat renderel a dia képeiben.