Tworzenie miniatur kształtów prezentacji w C++
Wprowadzenie
Aspose.Slides służy do tworzenia plików prezentacji, w których każda strona to slajd. Slajdy można przeglądać, otwierając pliki prezentacji w programie Microsoft PowerPoint. Czasami programiści potrzebują wyświetlić obrazy kształtów osobno w przeglądarce obrazów. W takich przypadkach Aspose.Slides pomaga generować miniatury obrazów kształtów slajdu. Jak korzystać z tej funkcji opisano w tym artykule.
W artykule wyjaśniono, jak generować miniatury slajdów na różne sposoby:
- Generowanie miniatury kształtu wewnątrz slajdu.
- Generowanie miniatury kształtu slajdu z wymiarami określonymi przez użytkownika.
- Generowanie miniatury kształtu w granicach wyglądu kształtu.
Generowanie miniatury kształtu ze slajdu
Aby wygenerować miniaturę kształtu z dowolnego slajdu przy użyciu Aspose.Slides for C++:
- Utwórz instancję klasy Presentation .
- Uzyskaj odniesienie do dowolnego slajdu przy użyciu jego identyfikatora lub indeksu.
- Pobierz obraz miniatury kształtu referowanego slajdu w domyślnej skali.
- Zapisz obraz miniatury w dowolnym żądanym formacie obrazu.
Poniżej znajduje się przykład generujący miniaturę kształtu.
auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
auto image = shape->GetImage();
image->Save(u"Shape_thumbnail_out.png", ImageFormat::Png);
image->Dispose();
presentation->Dispose();
Generowanie miniatury z czynnikiem skalowania określonym przez użytkownika
Aby wygenerować miniaturę kształtu dowolnego kształtu slajdu przy użyciu Aspose.Slides for C++:
- Utwórz instancję klasy Presentation .
- Uzyskaj odniesienie do dowolnego slajdu przy użyciu jego identyfikatora lub indeksu.
- Pobierz obraz miniatury referowanego slajdu z granicami kształtu.
- Zapisz obraz miniatury w dowolnym żądanym formacie obrazu.
Poniższy przykład generuje miniaturę z czynnikiem skalowania określonym przez użytkownika.
auto bounds = ShapeThumbnailBounds::Shape;
auto scale = 1; // Skalowanie wzdłuż osi X i Y.
auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
auto image = shape->GetImage(bounds, scale, scale);
image->Save(u"Scaling Factor Thumbnail_out.png", ImageFormat::Png);
image->Dispose();
presentation->Dispose();
Utworzenie miniatury wyglądu kształtu opartej na granicach
Ta metoda tworzenia miniatur kształtów umożliwia programistom generowanie miniatury w granicach wyglądu kształtu. Uwzględnia wszystkie efekty kształtu. Wygenerowana miniatura kształtu jest ograniczona przez granice slajdu. Aby wygenerować miniaturę dowolnego kształtu slajdu w granicach jego wyglądu, użyj poniższego przykładu kodu:
- Utwórz instancję klasy Presentation .
- Uzyskaj odniesienie do dowolnego slajdu przy użyciu jego identyfikatora lub indeksu.
- Pobierz obraz miniatury referowanego slajdu z granicami kształtu jako wygląd.
- Zapisz obraz miniatury w dowolnym żądanym formacie obrazu.
Poniższy przykład tworzy miniaturę przy użyciu czynnika skalowania określonego przez użytkownika.
auto bounds = ShapeThumbnailBounds::Appearance;
auto scale = 1; // Skalowanie wzdłuż osi X i Y.
auto presentation = MakeObject<Presentation>(u"HelloWorld.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
auto image = shape->GetImage(bounds, scale, scale);
image->Save(u"Shape_thumbnail_Bound_Shape_out.png", ImageFormat::Png);
image->Dispose();
presentation->Dispose();
Uzyskanie rzeczywistych granic wizualnych kształtu
Właściwości ramki IShape — IShape::get_X(), IShape::get_Y(), IShape::get_Width() i IShape::get_Height() — opisują prostokąt przechowywany w modelu prezentacji. Rzeczywista zawartość renderowana może wykraczać poza tę ramkę lub zajmować inny prostokąt wyrównany do osi. Obrót, kontury, grotki strzałek, układ i przepełnienie tekstu, generowana geometria SmartArt oraz inne efekty renderowania mogą zmienić zajmowany obszar.
Użyj Shape::GetVisualBounds aby obliczyć ten zajęty obszar bez tworzenia obrazu. Metoda zwraca RectangleF w współrzędnych slajdu. Zwrócony prostokąt nie jest przycięty do slajdu, więc jego współrzędne mogą być ujemne, gdy zawartość wykracza poza początek slajdu.
Shape::GetVisualBounds nie jest obecnie zadeklarowane w interfejsie IShape. Dlatego zachowaj kształt pobrany z kolekcji kształtów slajdu jako wartość interfejsu i rzutuj go tylko przy wywoływaniu metody.
Poniższy przykład pobiera i porównuje ramkę oraz granice wizualne:
auto presentation = MakeObject<Presentation>(u"example.pptx");
auto slide = presentation->get_Slide(0);
auto shape = slide->get_Shape(0);
auto visualBounds = System::AsCast<Shape>(shape)->GetVisualBounds();
System::Drawing::RectangleF frameBounds(
shape->get_X(), shape->get_Y(), shape->get_Width(), shape->get_Height());
Console::WriteLine(u"Frame bounds: {0}", frameBounds);
Console::WriteLine(u"Visual bounds: {0}", visualBounds);
presentation->Dispose();
Ten sam RectangleF może być używany do wyrównywania pobliskich kształtów do krawędzi RectangleF::get_Left(), RectangleF::get_Right(), RectangleF::get_Top() lub RectangleF::get_Bottom(), do zarezerwowania wystarczającej przestrzeni w wygenerowanym układzie lub do wykrywania zawartości poza dozwolonym obszarem. Granice wizualne są szczególnie przydatne dla SmartArt, pól tekstowych, strzałek, obrazów, obróconych kształtów i grup kształtów, gdzie zapisane ramki mogą nie odzwierciedlać pełnego wyniku renderowania.
Użyj Shape::GetVisualBounds, gdy potrzebujesz współrzędnych do układu lub walidacji i nie potrzebujesz bitmapy. Użyj IShape::GetImage, gdy musisz wyrenderować kształt. Przy użyciu ShapeThumbnailBounds, ShapeThumbnailBounds::Shape określa rozmiar obrazu na podstawie granic kształtu, w tym ustawień konturu, podczas gdy ShapeThumbnailBounds::Appearance określa rozmiar na podstawie wyglądu kształtu i ogranicza wynik do granic slajdu. Natomiast Shape::GetVisualBounds zwraca tylko obliczony prostokąt i nie przycina go do slajdu.
FAQ
Jakie formaty obrazów można używać przy zapisywaniu miniatur kształtów?
PNG, JPEG, BMP, GIF, TIFF, i inne. Kształty można także eksportować jako wektorowy SVG zapisując zawartość kształtu jako SVG.
Jaka jest różnica między granicami Shape a Appearance przy renderowaniu miniatury?
Shape używa geometrii kształtu; Appearance uwzględnia efekty wizualne (cienie, poświaty itp.).
Co się stanie, jeśli kształt jest oznaczony jako ukryty? Czy nadal zostanie wyrenderowany jako miniatura?
Ukryty kształt pozostaje częścią modelu i może być renderowany; flaga ukrycia wpływa na wyświetlanie pokazu slajdów, ale nie uniemożliwia generowania obrazu kształtu.
Czy grupowe kształty, wykresy, SmartArt i inne złożone obiekty są obsługiwane?
Tak. Każdy obiekt reprezentowany jako Shape (w tym GroupShape, Chart, i SmartArt) może być zapisany jako miniatura lub jako SVG.
Czy czcionki zainstalowane w systemie wpływają na jakość miniatur kształtów tekstowych?
Tak. Należy udostępnić wymagane czcionki (lub skonfigurować substytucje czcionek), aby uniknąć niechcianych zastąpień i przelotów tekstu.