Améliorer le traitement d'images avec l'API Moderne

Introduction

Actuellement, la bibliothèque Aspose.Slides pour C++ possède des dépendances dans son API publique aux classes suivantes de System::Drawing :

À partir de la version 24.4, cette API publique est déclarée obsolète.

Afin d’éliminer les dépendances à System::Drawing dans l’API publique, nous avons ajouté la dite « API Moderne ». Les méthodes utilisant System::Drawing::Image et System::Drawing::Bitmap sont déclarées obsolètes et seront remplacées par les méthodes correspondantes de l’API Moderne. Les méthodes utilisant System::Graphics sont déclarées obsolètes et leur support sera retiré de l’API publique.

La suppression de l’API publique obsolète avec des dépendances à System::Drawing sera réalisée dans la version 24.8.

API Moderne

Ajout des classes et énumérations suivantes à l’API publique :

  • Aspose::Slides::IImage – représente l’image raster ou vectorielle.
  • Aspose::Slides::ImageFormat – représente le format de fichier de l’image.
  • Aspose::Slides::Images – méthodes pour créer et manipuler l’interface IImage.

Un scénario typique d’utilisation de la nouvelle API peut ressembler à ce qui suit :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
        
// instancier une instance jetable d'IImage à partir du fichier sur le disque.  
System::SharedPtr<IImage> image = Images::FromFile(u"image.png");
            
// créer une image PowerPoint en ajoutant une instance d'IImage aux images de la présentation.
System::SharedPtr<IPPImage> ppImage = pres->get_Images()->AddImage(image);
        
// ajouter une forme image sur la diapositive #1
pres->get_Slide(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, ppImage);
        
// obtenir une instance d'IImage représentant la diapositive #1.
auto slideImage = pres->get_Slide(0)->GetImage(System::Drawing::Size(1920, 1080));

// enregistrer l'image sur le disque.
slideImage->Save(u"slide1.jpeg", Aspose::Slides::ImageFormat::Jpeg);

Remplacement du code ancien par l’API Moderne

Pour faciliter la transition, l’interface du nouveau IImage reprend les signatures distinctes des classes Image et Bitmap. En général, il vous suffit de remplacer l’appel à l’ancienne méthode utilisant System::Drawing par la nouvelle.

Obtention d’une vignette de diapositive

Code utilisant une API obsolète :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

pres->get_Slide(0)->GetThumbnail()->Save(u"slide1.png");

API Moderne :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

pres->get_Slide(0)->GetImage()->Save(u"slide1.png");

Obtention d’une vignette de forme

Code utilisant une API obsolète :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

pres->get_Slide(0)->get_Shape(0)->GetThumbnail()->Save(u"shape.png");

API Moderne :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

pres->get_Slide(0)->get_Shape(0)->GetImage()->Save(u"shape.png");

Obtention d’une vignette de présentation

Code utilisant une API obsolète :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

auto bitmaps = pres->GetThumbnails(System::MakeObject<RenderingOptions>(), System::Drawing::Size(1980, 1028));

for (int32_t index = 0; index < bitmaps->get_Length(); index++)
{
    System::SharedPtr<System::Drawing::Bitmap> thumbnail = bitmaps[index];
    thumbnail->Save(System::String::Format(u"slide_{0}.png", index), System::Drawing::Imaging::ImageFormat::get_Png());
}

API Moderne :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"pres.pptx");

auto images = pres->GetImages(System::MakeObject<RenderingOptions>(), System::Drawing::Size(1980, 1028));

for (int32_t index = 0; index < images->get_Length(); index++)
{
    System::SharedPtr<IImage> thumbnail = images[index];
    thumbnail->Save(System::String::Format(u"slide_{0}.png", index), Aspose::Slides::ImageFormat::Png);
}

Ajout d’une image à une présentation

Code utilisant une API obsolète :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

System::SharedPtr<System::Drawing::Image> image = System::Drawing::Image::FromFile(u"image.png");

System::SharedPtr<IPPImage> ppImage = pres->get_Images()->AddImage(image);

pres->get_Slide(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, ppImage);

API Moderne :

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

System::SharedPtr<Aspose::Slides::IImage> image = Aspose::Slides::Images::FromFile(u"image.png");

System::SharedPtr<IPPImage> ppImage = pres->get_Images()->AddImage(image);

pres->get_Slide(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, ppImage);

Méthodes/Propriétés à supprimer et leurs remplacements dans l’API Moderne

Classe Presentation

Signature de méthode Signature de la méthode de remplacement
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options) GetImages(System::SharedPtr<Export::IRenderingOptions> options)
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides) GetImages(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides)
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options, float scaleX, float scaleY) GetImages(System::SharedPtr<Export::IRenderingOptions> options, float scaleX, float scaleY)
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides, float scaleX, float scaleY) GetImages(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides, float scaleX, float scaleY)
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options, System::Drawing::Size imageSize) GetImages(System::SharedPtr<Export::IRenderingOptions> options, System::Drawing::Size imageSize)
GetThumbnails(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides, System::Drawing::Size imageSize) GetImages(System::SharedPtr<Export::IRenderingOptions> options, System::ArrayPtr<int32_t> slides, System::Drawing::Size imageSize)
Save(System::String fname, System::ArrayPtr<int32_t> slides, Export::SaveFormat format) Will be deleted completely
Save(System::String fname, System::ArrayPtr<int32_t> slides, Export::SaveFormat format, System::SharedPtr<Export::ISaveOptions> options) Will be deleted completely

Classe Slide

Signature de méthode Signature de la méthode de remplacement
GetThumbnail() GetImage()
GetThumbnail(float scaleX, float scaleY) GetImage(float scaleX, float scaleY)
GetThumbnail(System::Drawing::Size imageSize) GetImage(System::Drawing::Size imageSize)
GetThumbnail(System::SharedPtr<Export::ITiffOptions> options) GetImage(System::SharedPtr<Export::IRenderingOptions> options
GetThumbnail(System::SharedPtr<Export::IRenderingOptions> options) GetImage(System::SharedPtr<Export::IRenderingOptions> options)
GetThumbnail(System::SharedPtr<Export::IRenderingOptions> options, float scaleX, float scaleY) GetImage(System::SharedPtr<Export::IRenderingOptions> options, float scaleX, float scaleY)
GetThumbnail(System::SharedPtr<Export::IRenderingOptions> options, System::Drawing::Size imageSize) GetImage(System::SharedPtr<Export::IRenderingOptions> options, System::Drawing::Size imageSize)
RenderToGraphics(System::SharedPtr<Export::IRenderingOptions> options, System::SharedPtr<System::Drawing::Graphics> graphics) Will be deleted completely
RenderToGraphics(System::SharedPtr<Export::IRenderingOptions> options, System::SharedPtr<System::Drawing::Graphics> graphics, float scaleX, float scaleY) Will be deleted completely
RenderToGraphics(System::SharedPtr<Export::IRenderingOptions> options, System::SharedPtr<System::Drawing::Graphics> graphics, System::Drawing::Size renderingSize) Will be deleted completely

Classe Shape

Signature de méthode Signature de la méthode de remplacement
GetThumbnail() GetImage()
GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Classe ImageCollection

Signature de méthode Signature de la méthode de remplacement
AddImage(System::SharedPtr<System::Drawing::Image> image) AddImage(System::SharedPtr<IImage> image)

Classe PPImage

Signature de méthode Signature de la méthode de remplacement
ReplaceImage(System::SharedPtr<System::Drawing::Image> newImage) ReplaceImage(System::SharedPtr<Aspose::Slides::IImage> newImage)
get_SystemImage() get_Image()

Classe PatternFormat

Signature de méthode Signature de la méthode de remplacement
GetTileImage(System::Drawing::Color background, System::Drawing::Color foreground) GetTile(System::Drawing::Color background, System::Drawing::Color foreground)
GetTileImage(System::Drawing::Color styleColor) GetTile(System::Drawing::Color styleColor)

Classe IPatternFormatEffectiveData

Signature de méthode Signature de la méthode de remplacement
GetTileImage(System::Drawing::Color background, System::Drawing::Color foreground) GetTileIImage(System::Drawing::Color background, System::Drawing::Color foreground)

Le support de System::Drawing::Graphics dans l’API sera interrompu

Les méthodes avec System::Drawing::Graphics sont déclarées obsolètes et leur support sera retiré de l’API publique.

La partie de l’API qui l’utilise sera supprimée :

FAQ

Pourquoi System::Drawing::Graphics a-t-il été abandonné ?

Le support de Graphics est supprimé de l’API publique afin d’unifier le travail de rendu et d’image, d’éliminer les dépendances spécifiques à la plateforme et de passer à une approche multiplateforme avec IImage. Toutes les méthodes de rendu vers Graphics seront retirées.

Quel est l’avantage pratique d’IImage par rapport à Image/Bitmap ?

IImage unifie la manipulation des images raster et vectorielles, simplifie l’enregistrement dans divers formats via ImageFormat, réduit la dépendance à System::Drawing et rend le code plus portable entre différents environnements.

L’API Moderne affectera-t-elle les performances de génération des vignettes ?

Passer de GetThumbnail à GetImage n’entraîne pas de dégradation : les nouvelles méthodes offrent les mêmes capacités de génération d’images avec options et tailles, tout en conservant le support des options de rendu. Le gain ou la perte spécifique dépend du scénario, mais fonctionnellement les remplacements sont équivalents.