Förbättra bildbehandling med Modern API

Introduktion

För närvarande har Aspose.Slides för C++-biblioteket beroenden i sitt offentliga API på följande klasser från System::Drawing:

Från och med version 24.4 har detta offentliga API deklarerats som föråldrat.

För att bli av med beroenden på System::Drawing i det offentliga API:t lade vi till det så kallade “Modern API”. Metoder med System::Drawing::Image och System::Drawing::Bitmap har förklarats som föråldrade och bör ersättas med motsvarande metoder från Modern API. Metoder med System::Drawing::Graphics har förklarats som föråldrade och har ingen direkt Modern API‑ersättning.

I de aktuella versionerna bör du betrakta det offentliga API som är beroende av System::Drawing-typer som legacy/föråldrat. Använd Modern API för ny kod och när du migrerar befintliga bildbehandlingsarbetsflöden.

Modern API

Följande klasser och uppräkningar har lagts till i det offentliga API:t:

Använd GetImage för att rendera en enda bild eller form. Använd GetImages för att rendera flera bildspelssidor. Använd [Images]-metoder för att läsa in bilder, AddImage med [IImage] för att lägga till dem i en presentation och ReplaceImage med [IImage] för att uppdatera en befintlig bild i presentationen.

Ett typiskt scenario för att använda det nya API:et kan se ut som följer:

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
        
// instansiera en engångsinstans av IImage från filen på disk.  
System::SharedPtr<IImage> image = Images::FromFile(u"image.png");
            
// skapa en PowerPoint-bild genom att lägga till en IImage-instans till presentationens bilder.
System::SharedPtr<IPPImage> ppImage = pres->get_Images()->AddImage(image);
        
// lägg till en bildform på bildspel #1
pres->get_Slide(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, ppImage);
        
// hämta en instans av IImage som representerar bildspel #1.
auto slideImage = pres->get_Slide(0)->GetImage(System::Drawing::Size(1920, 1080));

// spara bilden på disk.
slideImage->Save(u"slide1.jpeg", Aspose::Slides::ImageFormat::Jpeg);

Ersätta gammal kod med Modern API

För att underlätta övergången upprepar gränssnittet för den nya IImage de separata signaturerna för klasserna System::Drawing::Image och System::Drawing::Bitmap. I allmänhet behöver du bara ersätta anropet till den gamla metoden som använder System::Drawing med den nya.

Hämta en bilds miniatyr

Legacy/deprecated API:

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

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

Modern API:

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

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

Hämta en miniatyr för en form

Legacy/deprecated API:

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

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

Modern API:

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

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

Hämta en miniatyr för en presentation

Legacy/deprecated API:

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());
}

Modern API:

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);
}

Lägga till en bild i en presentation

Legacy/deprecated API:

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);

Modern API:

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);

Föråldrande metoder/egenskaper och deras ersättning i Modern API

Presentation Class

Metodsignatur Ersättningsmetodsignatur
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) No Modern API replacement
Save(System::String fname, System::ArrayPtr<int32_t> slides, Export::SaveFormat format, System::SharedPtr<Export::ISaveOptions> options) No Modern API replacement

Slide Class

Metodsignatur Ersättningsmetodsignatur
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) No Modern API replacement
RenderToGraphics(System::SharedPtr<Export::IRenderingOptions> options, System::SharedPtr<System::Drawing::Graphics> graphics, float scaleX, float scaleY) No Modern API replacement
RenderToGraphics(System::SharedPtr<Export::IRenderingOptions> options, System::SharedPtr<System::Drawing::Graphics> graphics, System::Drawing::Size renderingSize) No Modern API replacement

Shape Class

Metodsignatur Ersättningsmetodsignatur
GetThumbnail() GetImage()
GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

ImageCollection Class

Metodsignatur Ersättningsmetodsignatur
AddImage(System::SharedPtr<System::Drawing::Image> image) AddImage(System::SharedPtr<IImage> image)

PPImage Class

Metodsignatur Ersättningsmetodsignatur
ReplaceImage(System::SharedPtr<System::Drawing::Image> newImage) ReplaceImage(System::SharedPtr<Aspose::Slides::IImage> newImage)
get_SystemImage() get_Image()

PatternFormat Class

Metodsignatur Ersättningsmetodsignatur
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)

IPatternFormatEffectiveData Class

Metodsignatur Ersättningsmetodsignatur
GetTileImage(System::Drawing::Color background, System::Drawing::Color foreground) GetTileIImage(System::Drawing::Color background, System::Drawing::Color foreground)

API-stöd för System::Drawing::Graphics

Metoder med System::Drawing::Graphics är förklarade som föråldrade och har ingen direkt Modern API‑ersättning.

Använd Modern API:s bildrenderingsmetoder istället för API:t som renderar till System::Drawing::Graphics:

FAQ

Varför togs System::Drawing::Graphics bort?

Stödet för System::Drawing::Graphics är föråldrat i det offentliga API:t för att förena arbete med rendering och bilder, eliminera beroenden på plattforms‑specifika komponenter och gå över till ett plattformsoberoende tillvägagångssätt med IImage. Använd GetImage eller GetImages i stället för att rendera till System::Drawing::Graphics.

Vilken praktisk fördel har IImage jämfört med System::Drawing::Image/System::Drawing::Bitmap?

IImage förenar arbete med både raster- och vektorbilder, förenklar sparande i olika format via ImageFormat, minskar beroendet av System::Drawing och gör koden mer portabel över olika miljöer.

Kommer Modern API att påverka prestandan vid generering av miniatyrbilder?

Att byta från GetThumbnail till GetImage försämrar inte scenarierna: de nya metoderna erbjuder samma möjligheter att producera bilder med alternativ och storlekar, samtidigt som stöd för renderingsalternativ bevaras. Den specifika vinsten eller förlusten beror på scenariot, men funktionellt är ersättningarna likvärdiga.