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 :
- Slide::RenderToGraphics(System::SharedPtr<Export::IRenderingOptions>, System::SharedPtr<System::Drawing::Graphics>)
- Slide::RenderToGraphics(System::SharedPtr<Export::IRenderingOptions>, System::SharedPtr<System::Drawing::Graphics>, float, float)
- Slide::RenderToGraphics(System::SharedPtr<Export::IRenderingOptions>, System::SharedPtr<System::Drawing::Graphics>, System::Drawing::Size)
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.