Meningkatkan Pemrosesan Gambar dengan API Modern

Pendahuluan

Saat ini, pustaka Aspose.Slides untuk C++ memiliki ketergantungan dalam API publiknya pada kelas-kelas berikut dari System::Drawing:

Mulai versi 24.4, API publik ini dinyatakan usang.

Untuk menghilangkan ketergantungan pada System::Drawing dalam API publik, kami menambahkan apa yang disebut “Modern API”. Metode dengan System::Drawing::Image dan System::Drawing::Bitmap dinyatakan usang dan harus diganti dengan metode yang bersesuaian dari Modern API. Metode dengan System::Drawing::Graphics dinyatakan usang dan tidak memiliki pengganti Modern API secara langsung.

Dalam versi saat ini, perlakukan API publik yang bergantung pada tipe System::Drawing sebagai warisan/usang. Gunakan Modern API untuk kode baru dan ketika memigrasikan alur kerja pemrosesan gambar yang ada.

Modern API

Ditambahkan kelas dan enumerasi berikut ke API publik:

Gunakan GetImage untuk merender satu slide atau bentuk. Gunakan GetImages untuk merender beberapa slide presentasi. Gunakan metode Images untuk memuat gambar, AddImage dengan IImage untuk menambahkannya ke presentasi, dan ReplaceImage dengan IImage untuk memperbarui gambar presentasi yang ada.

Skenario tipikal penggunaan API baru dapat terlihat seperti berikut:

System::SharedPtr<Presentation> pres = System::MakeObject<Presentation>();
        
// instansiasi objek IImage yang dapat dibuang dari berkas di disk.  
System::SharedPtr<IImage> image = Images::FromFile(u"image.png");
            
// buat gambar PowerPoint dengan menambahkan instance IImage ke gambar presentasi.
System::SharedPtr<IPPImage> ppImage = pres->get_Images()->AddImage(image);
        
// tambahkan bentuk gambar pada slide #1
pres->get_Slide(0)->get_Shapes()->AddPictureFrame(Aspose::Slides::ShapeType::Rectangle, 10.0f, 10.0f, 100.0f, 100.0f, ppImage);
        
// dapatkan instance IImage yang mewakili slide #1.
auto slideImage = pres->get_Slide(0)->GetImage(System::Drawing::Size(1920, 1080));

// simpan gambar ke disk.
slideImage->Save(u"slide1.jpeg", Aspose::Slides::ImageFormat::Jpeg);

Mengganti Kode Lama dengan Modern API

Untuk memudahkan transisi, antarmuka dari IImage yang baru mengulangi tanda tangan terpisah dari kelas System::Drawing::Image dan System::Drawing::Bitmap. Secara umum, Anda hanya perlu mengganti panggilan ke metode lama yang menggunakan System::Drawing dengan yang baru.

Mendapatkan Thumbnail Slide

API warisan/usang:

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

Mendapatkan Thumbnail Bentuk

API warisan/usang:

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

Mendapatkan Thumbnail Presentasi

API warisan/usang:

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

Menambahkan Gambar ke Presentasi

API warisan/usang:

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

Metode/Properti Usang dan Penggantinya di Modern API

Kelas Presentation

Signature Metode Signature Metode Pengganti
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

Kelas Slide

Signature Metode Signature Metode Pengganti
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

Kelas Shape

Signature Metode Signature Metode Pengganti
GetThumbnail() GetImage()
GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Kelas ImageCollection

Signature Metode Signature Metode Pengganti
AddImage(System::SharedPtr<System::Drawing::Image> image) AddImage(System::SharedPtr<IImage> image)

Kelas PPImage

Signature Metode Signature Metode Pengganti
ReplaceImage(System::SharedPtr<System::Drawing::Image> newImage) ReplaceImage(System::SharedPtr<Aspose::Slides::IImage> newImage)
get_SystemImage() get_Image()

Kelas PatternFormat

Signature Metode Signature Metode Pengganti
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)

Kelas IPatternFormatEffectiveData

Signature Metode Signature Metode Pengganti
GetTileImage(System::Drawing::Color background, System::Drawing::Color foreground) GetTileIImage(System::Drawing::Color background, System::Drawing::Color foreground)

Dukungan API untuk System::Drawing::Graphics

Metode dengan System::Drawing::Graphics dinyatakan usang dan tidak memiliki pengganti Modern API secara langsung.

Gunakan metode rendering gambar Modern API sebagai gantinya API yang merender ke System::Drawing::Graphics:

FAQ

Mengapa System::Drawing::Graphics dihapus?

Dukungan untuk System::Drawing::Graphics dinyatakan usang dalam API publik untuk menyatukan pekerjaan rendering dan gambar, menghilangkan ketergantungan pada platform tertentu, dan beralih ke pendekatan lintas platform dengan IImage. Gunakan GetImage atau GetImages alih-alih merender ke System::Drawing::Graphics.

Apa manfaat praktis IImage dibandingkan System::Drawing::Image/System::Drawing::Bitmap?

IImage menyatukan kerja dengan gambar raster dan vektor, menyederhanakan penyimpanan ke berbagai format melalui ImageFormat, mengurangi ketergantungan pada System::Drawing, dan membuat kode lebih portabel di berbagai lingkungan.

Apakah Modern API akan memengaruhi kinerja pembuatan thumbnail?

Berpindah dari GetThumbnail ke GetImage tidak memperburuk skenario: metode baru memberikan kemampuan yang sama untuk menghasilkan gambar dengan opsi dan ukuran, sambil mempertahankan dukungan untuk opsi rendering. Keuntungan atau penurunan spesifik tergantung pada skenario, namun secara fungsional penggantinya setara.