C++ के साथ प्रस्तुतियों में छवि रूपांतरण प्रभावों का प्रबंधन

सारांश

Aspose.Slides चित्र समायोजन को छवि रूपांतरण ऑपरेशनों के क्रमबद्ध संग्रह के रूप में दर्शाता है। एक चित्र फ्रेम के लिए, फ्रेम के ISlidesPicture से शुरू करें और ISlidesPicture::get_ImageTransform तक पहुंचें। लौटाए गए IImageTransformOperationCollection आपको मूल छवि बाइट्स को पुनः लिखे बिना प्रभावों को जोड़ने, गिनने, निरीक्षण करने, हटाने और साफ़ करने की अनुमति देते हैं।

यह लेख चमक और कंट्रास्ट, रंग रूपांतरण, ब्लर, पारदर्शिता, क्रमबद्ध प्रभाव श्रृंखला, प्रभावी मान, हटाना, और PPTX राउंड‑ट्रिप सत्यापन के लिए पूर्ण कार्यप्रवाह दिखाता है।

इफ़ेक्ट स्वामित्व और छवि पुन: उपयोग को समझें

  • IPPImage प्रस्तुति द्वारा स्वामित्व वाली स्रोत छवि डेटा को संग्रहित या संदर्भित करता है।
  • ISlidesPicture एक चित्र फ़िल में रहता है और एक छवि संसाधन को संदर्भित करता है जबकि छवि रूपांतरण संग्रह को संग्रहीत करता है।
  • IPictureFrame वह स्लाइड आकार है जो संबंधित चित्र फ़िल, जियोमेट्री, क्रॉप सेटिंग्स और अन्य फ्रेम‑स्तरीय फ़ॉर्मेटिंग को स्वामित्व में लेता है।

इसलिए, छवि रूपांतरण ऑपरेशनों से IPPImage की बाइट्स नहीं बदलती। जब वही IPPImage को IShapeCollection::AddPictureFrame में एक से अधिक बार पास किया जाता है, तो प्रत्येक नया चित्र फ्रेम अपना स्वयं का ISlidesPicture और अपना स्वयं का रूपांतरण संग्रह प्राप्त करता है। एक फ्रेम पर ग्रेस्केल लागू करने से अन्य फ्रेम ग्रेस्केल नहीं होते, भले ही सभी समान एम्बेडेड छवि संसाधन का पुन: उपयोग करें।

उसी ISlidesPicture::get_ImageTransform मॉडल का उपयोग अन्य चित्र फ़िल के द्वारा भी किया जाता है, जैसे कि आकार या स्लाइड पृष्ठभूमि। नीचे के उदाहरण मुख्यतः चित्र फ्रेम पर केन्द्रित हैं।

मान्य पैरामीटर रेंज और इकाइयों का उपयोग करें

प्रदर्शित विधियों में निम्नलिखित अर्थभारित रेंज और इकाइयाँ उपयोग की गई हैं। भले ही कोई विशेष लाइब्रेरी संस्करण तुरंत सभी अतिपारर रेंज मानों को अस्वीकृत न करे, लक्ष्य प्रस्तुतिकरण स्वरूप सहेजते समय या PowerPoint फ़ाइल खोलते समय अमान्य डेटा को सामान्यीकृत, निकाल या अस्वीकृत कर सकता है।

ऑपरेशन पैरामीटर मान्य रेंज और इकाई
AddBrightnessContrastEffect brightness, contrast -100 से 100 तक, प्रतिशत; 0 घटक को अपरिवर्तित रखता है।
AddGrayScaleEffect None कोई नहीं। कोई संख्यात्मक पैरामीटर नहीं। अल्फा अपरिवर्तित रहता है।
AddDuotoneEffect Color1, Color2 गहरे और हल्के पिक्सेल के लिए दो रंग। System::Drawing::Color में RGB और अल्फा चैनल 0 से 255 तक उपयोग करते हैं।
AddTintEffect hue, amount ह्यू 0 (समावेशी) से 360 (असमावेशी) डिग्री में है; मात्रा -100 से 100 तक, प्रतिशत।
AddHSLEffect hue, saturation, luminance ह्यू 0 (समावेशी) से 360 (असमावेशी) डिग्री में है; संतृप्ति और प्रकाशमानता -100 से 100 तक, प्रतिशत।
AddColorReplaceEffect Color प्रतिस्थापन रंग 0 से 255 तक चैनल मान उपयोग करता है। मौजूदा अल्फा मान अपरिवर्तित रहता है।
AddBlurEffect radius, grow त्रिज्या अपरिचित है और पॉइंट्स में मापी जाती है; grow नियंत्रित करता है कि धुंधला कंटेंट मूल सीमा के बाहर फैल सकता है या नहीं।
AddAlphaModulateFixedEffect amount अपरिचित प्रतिशत। सामान्य अपारदर्शिता स्केलिंग के लिए 0 से 100 उपयोग करें: 0 पूरी तरह पारदर्शी और 100 मौजूदा अल्फा को बनाए रखता है।
AddAlphaReplaceEffect alpha 0 से 100 तक, प्रतिशत अपारदर्शिता।
AddAlphaBiLevelEffect threshold 0 से 100 तक, प्रतिशत अल्फा थ्रेशहोल्ड। इसके नीचे के मान पारदर्शी हो जाते हैं; थ्रेशहोल्ड के बराबर या ऊपर के मान अपारदर्शी हो जाते हैं।

स्थिर अल्फा माड्यूलेशन के लिए, पारदर्शिता और अपारदर्शिता परस्परपूरक होते हैं। उदाहरण के लिए, 35 % पारदर्शिता अल्फा माड्यूलेशन मात्रा 65 % के बराबर है।

चमक और कंट्रास्ट लागू करें

IImageTransformOperationCollection::AddBrightnessContrastEffect एक IBrightnessContrast ऑपरेशन लौटाता है। उसके स्केलर सेटिंग्स ऑपरेशन बनाते समय आपूर्ति की जाती हैं। IBrightnessContrast::GetEffective मेथड गणना किए गए केवल‑पढ़ने‑योग्य मान लौटाता है जिन्हें निरीक्षण या लॉग किया जा सकता है।

निम्न उदाहरण चमक को 15 % और कंट्रास्ट को 20 % बढ़ाता है, फिर एम्बेडेड छवि को बदले बिना एक प्रीव्यू रेंडर करता है:

#include <DOM/Effects/IBrightnessContrast.h>
#include <DOM/Effects/IBrightnessContrastEffectiveData.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/IImageCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <system/console.h>
#include <system/io/file.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Effects;
using namespace System;
using namespace System::IO;

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);

auto imageData = File::ReadAllBytes(u"photo.png");
auto image = presentation->get_Images()->AddImage(imageData);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50.0f, 50.0f, 400.0f, 260.0f, image);

auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
auto brightnessContrast = imageTransform->AddBrightnessContrastEffect(15.0f, 20.0f);

auto effectiveValues = brightnessContrast->GetEffective();
Console::WriteLine(u"Brightness: {0}%", effectiveValues->get_Brightness());
Console::WriteLine(u"Contrast: {0}%", effectiveValues->get_Contrast());

auto preview = slide->GetImage();
preview->Save(u"brightness-contrast-preview.png", ImageFormat::Png);

presentation->Dispose();

BrightnessContrast एक Office 2010 चित्र‑इफ़ेक्ट विस्तार है और मानक DrawingML ल्यूमिनेंस इफ़ेक्ट की तुलना में कम पोर्टेबल है। जब चमक और कंट्रास्ट को PPTX राउंड‑ट्रिप के बाद भी संपादन योग्य रखना हो, तो IImageTransformOperationCollection::AddLuminanceEffect का उपयोग करें और फ़ाइल को पुनः खोलने के बाद परिणाम सत्यापित करें। स्वरूप सीमाएँ इस अंतर को अधिक विस्तार से समझाती हैं।

रंग रूपांतरण लागू करें

रंग प्रभावों को स्वतंत्र रूप से विभिन्न चित्र फ्रेम पर लागू किया जा सकता है जो एक ही छवि संसाधन को पुन: उपयोग करते हैं। निम्न उदाहरण पाँच फ्रेम बनाता है और क्रमशः ग्रेस्केल, डुओटोन, टिंट, HSL समायोजन, और रंग प्रतिस्थापन लागू करता है।

IDuotone दो स्वतंत्र रूप से संपादन योग्य रंग पैरामीटर रखता है: get_Color1 गहरे पिक्सेल को मैप करता है, जबकि get_Color2 हल्के पिक्सेल को मैप करता है। यह एक ऐसे इफ़ेक्ट का उपयोगी उदाहरण है जिसकी सेटिंग्स एकल स्केलर मान से अधिक जटिल हैं।

#include <DOM/Effects/IColorReplace.h>
#include <DOM/Effects/IDuotone.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/IColorFormat.h>
#include <DOM/IImageCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <drawing/color.h>
#include <system/io/file.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::Drawing;
using namespace System::IO;

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);

auto imageData = File::ReadAllBytes(u"photo.png");
auto image = presentation->get_Images()->AddImage(imageData);

auto grayFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 180.0f, 120.0f, image);
grayFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddGrayScaleEffect();

auto duotoneFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 220.0f, 20.0f, 180.0f, 120.0f, image);
auto duotone = duotoneFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddDuotoneEffect();
duotone->get_Color1()->set_Color(Color::get_Navy());
duotone->get_Color2()->set_Color(Color::get_Gold());

auto tintFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 420.0f, 20.0f, 180.0f, 120.0f, image);
tintFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddTintEffect(210.0f, 35.0f);

auto hslFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 120.0f, 170.0f, 180.0f, 120.0f, image);
hslFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddHSLEffect(30.0f, 20.0f, -10.0f);

auto replacementFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 320.0f, 170.0f, 180.0f, 120.0f, image);
auto colorReplacement = replacementFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddColorReplaceEffect();
colorReplacement->get_Color()->set_Color(Color::get_CornflowerBlue());

presentation->Save(u"color-transformations.pptx", SaveFormat::Pptx);
presentation->Dispose();

AddColorReplaceEffect प्रत्येक पिक्सेल के रंग को एक निश्चित रंग से बदलता है जबकि अल्फा को बरकरार रखता है। यह AddColorChangeEffect से अलग है, जो एक स्रोत रंग को दूसरे में मैप करता है और दोनों स्रोत व लक्ष्य रंग स्वरूपों को उजागर करता है।

ब्लर, पारदर्शिता, और अल्फा प्रभाव जोड़ें

AddBlurEffect सभी रंग चैनलों को प्रभावित करता है, जिसमें अल्फा भी शामिल है। जब धुंधली किनारा मूल चित्र सीमा से बाहर फैल सकता है, तो grow को true सेट करें।

समरूप पारदर्शिता के लिए, AddAlphaModulateFixedEffect का उपयोग करें। यह प्रत्येक मौजूदा अल्फा मान को गुणा करता है, इसलिए आंशिक रूप से पारदर्शी पिक्सेल आनुपातिक रूप से अलग रहते हैं। AddAlphaReplaceEffect सभी पिक्सेल को एक ही अल्फा मान असाइन करता है। AddAlphaBiLevelEffect थ्रेशहोल्ड के आधार पर अल्फा को दो स्तरों में बदलता है।

#include <DOM/Effects/IAlphaBiLevel.h>
#include <DOM/Effects/IAlphaModulateFixed.h>
#include <DOM/Effects/IBlur.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/IImageCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <Export/SaveFormat.h>
#include <system/io/file.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);

auto imageData = File::ReadAllBytes(u"photo.png");
auto image = presentation->get_Images()->AddImage(imageData);

auto blurredFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 20.0f, 200.0f, 140.0f, image);
auto blur = blurredFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddBlurEffect(4.5, true);
blur->set_Radius(5.0);

auto transparentFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 240.0f, 20.0f, 200.0f, 140.0f, image);
auto alphaModulate = transparentFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddAlphaModulateFixedEffect(65.0f);
alphaModulate->set_Amount(60.0f);

auto uniformAlphaFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 20.0f, 180.0f, 200.0f, 140.0f, image);
uniformAlphaFrame->get_PictureFormat()->get_Picture()->get_ImageTransform()->AddAlphaReplaceEffect(55.0f);

auto binaryAlphaFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 240.0f, 180.0f, 200.0f, 140.0f, image);
auto binaryAlphaTransform = binaryAlphaFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
auto alphaBiLevel = binaryAlphaTransform->AddAlphaBiLevelEffect(50.0f);
alphaBiLevel->set_Threshold(45.0f);
binaryAlphaTransform->AddAlphaInverseEffect();

presentation->Save(u"blur-and-alpha-effects.pptx", SaveFormat::Pptx);
presentation->Dispose();

अन्य पैरामीटर‑रहित अल्फा ऑपरेशन में AddAlphaCeilingEffect शामिल है, जो प्रत्येक शून्य‑से‑भिन्न अल्फा को पूरी तरह अपारदर्शी बनाता है; AddAlphaFloorEffect जो 100 % से कम प्रत्येक अल्फा को पूरी तरह पारदर्शी बना देता है; और AddAlphaInverseEffect जो अल्फा को 100% - alpha में बदलता है।

एक क्रमबद्ध प्रभाव श्रृंखला बनाएं

प्रत्येक Add...Effect मेथड संग्रह के अंत में एक नया ऑपरेशन जोड़ता है। रेंडरर संग्रह को क्रमबद्ध पाइपलाइन के रूप में उपयोग करता है: ऑपरेशन 0 का आउटपुट ऑपरेशन 1 का इनपुट बन जाता है, आगे इसी प्रकार। परिणामस्वरूप, समान ऑपरेशनों को अलग क्रम में रखने से विभिन्न चित्र बन सकते हैं।

उदाहरण के तौर पर, ग्रेस्केल के बाद टिंट पहले रंगीय जानकारी हटाता है और फिर ल्यूमिनेंस परिणाम को पुनः रंग देता है। टिंट के बाद ग्रेस्केल टिंट को फिर से हटा देता है। इसी प्रकार, अल्फा प्रतिस्थापन पहले के ऑपरेशनों द्वारा गणना किए गए अल्फा मानों को अधिलेखित कर सकता है, जबकि अल्फा मोड्यूलेशन उनके सापेक्ष अंतर को संरक्षित रखता है।

निम्न उदाहरण चार‑ऑपरेशन श्रृंखला बनाता है, उसे PPTX के रूप में सहेजता है, प्रस्तुति को पुनः खोलता है, दोनों ऑपरेशन प्रकार और उनका क्रम जाँचता है, और पुनः खुले परिणाम को रेंडर करता है:

#include <DOM/Effects/IAlphaModulateFixed.h>
#include <DOM/Effects/IBlur.h>
#include <DOM/Effects/IGrayScale.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/Effects/ITint.h>
#include <DOM/IImageCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShape.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <DOM/ShapeType.h>
#include <IImage.h>
#include <ImageFormat.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
#include <system/io/file.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Effects;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;

auto presentation = MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto imageData = File::ReadAllBytes(u"photo.png");
auto image = presentation->get_Images()->AddImage(imageData);
auto pictureFrame = slide->get_Shapes()->AddPictureFrame(ShapeType::Rectangle, 50.0f, 50.0f, 400.0f, 260.0f, image);

auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
imageTransform->AddGrayScaleEffect();
imageTransform->AddTintEffect(220.0f, 25.0f);
imageTransform->AddBlurEffect(2.5, false);
imageTransform->AddAlphaModulateFixedEffect(80.0f);

presentation->Save(u"image-transform-chain.pptx", SaveFormat::Pptx);
presentation->Dispose();

auto reopenedPresentation = MakeObject<Presentation>(u"image-transform-chain.pptx");
auto reopenedShape = reopenedPresentation->get_Slide(0)->get_Shape(0);

if (ObjectExt::Is<IPictureFrame>(reopenedShape))
{
    auto reopenedFrame = ExplicitCast<IPictureFrame>(reopenedShape);
    auto reopenedTransform = reopenedFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
    auto orderIsPreserved = reopenedTransform->get_Count() == 4 && 
            ObjectExt::Is<IGrayScale>(reopenedTransform->idx_get(0)) && 
            ObjectExt::Is<ITint>(reopenedTransform->idx_get(1)) && 
            ObjectExt::Is<IBlur>(reopenedTransform->idx_get(2)) && 
            ObjectExt::Is<IAlphaModulateFixed>(reopenedTransform->idx_get(3));
    Console::WriteLine(orderIsPreserved ? u"The effect chain was preserved." : u"The effect chain changed during the round trip.");

    auto renderedSlide = reopenedPresentation->get_Slide(0)->GetImage();
    renderedSlide->Save(u"reopened-effect-chain.png", ImageFormat::Png);
}
else
{
    Console::WriteLine(u"The reopened shape is not a picture frame.");
}

reopenedPresentation->Dispose();

संग्रह एक संगतता मैट्रिक्स लागू नहीं करता जो रंग, अल्फा और ब्लर ऑपरेशनों को अलग‑अलग श्रृंखलाओं तक सीमित करता हो। उन्हें संयोजित किया जा सकता है, लेकिन सभी संयोजन हमेशा उपयोगी नहीं होते। एक स्थिर रंग प्रतिस्थापन पिछले रंग प्रभावों द्वारा उत्पन्न RGB परिवर्तन को हटा देता है; डुओटोन के बाद ग्रेस्केल दो चयनित रंगों को हटा देता है; और अल्फा सीलिंग, फ़्लोर, प्रतिस्थापन या बि‑लेवल ऑपरेशनों से पहले बनाए गए अल्फा विवरण को हटा दिया जा सकता है। श्रृंखला को इच्छित पिक्सेल‑प्रक्रिया क्रम के अनुसार बनाएं, न कि इसकी वस्तुओं को अनऑर्डर्ड फ़ॉर्मेटिंग फ़्लैग मानें।

संपादन योग्य और प्रभावी मानों का निरीक्षण करें

एक संपादन योग्य ऑपरेशन वह वस्तु है जो ISlidesPicture::get_ImageTransform में संग्रहीत होती है। प्रभाव के आधार पर, यह सीधे लिखने योग्य सदस्य उजागर कर सकता है। उदाहरण के लिए, IBlur set_Radius और set_Grow उजागर करता है, IAlphaModulateFixed set_Amount उजागर करता है, और IAlphaBiLevel set_Threshold उजागर करता है। IDuotone जैसे रंग प्रभाव mutable IColorFormat वस्तुओं को उजागर करते हैं।

कुछ ऑपरेशन इंटरफ़ेस, जैसे कि IBrightnessContrast, IHSL, ITint, और IAlphaReplace, अपनी निर्माण स्केलर को लिखने योग्य प्रॉपर्टी के रूप में उजागर नहीं करते। इन सेटिंग्स को बदलने के लिए, ऑपरेशन को हटाएँ और आवश्यक स्थिति पर प्रतिस्थापन जोड़ें।

GetEffective() द्वारा लौटाया गया प्रभावी डेटा गणना किया हुआ तथा केवल‑पढ़ने‑योग्य होता है। यह थीम‑निर्भर रंगों को हल करने और रेंडरर द्वारा उपयोग किए गए सामान्यीकृत मान पढ़ने में उपयोगी है, लेकिन यह एक अन्य संपादन सतह नहीं है। निम्न उदाहरण श्रृंखला को गिनती करता है और कई सामान्य ऑपरेशनों के प्रभावी मानों को निरीक्षण करता है:

#include <DOM/Effects/IAlphaModulateFixed.h>
#include <DOM/Effects/IAlphaModulateFixedEffectiveData.h>
#include <DOM/Effects/IBlur.h>
#include <DOM/Effects/IBlurEffectiveData.h>
#include <DOM/Effects/IBrightnessContrast.h>
#include <DOM/Effects/IBrightnessContrastEffectiveData.h>
#include <DOM/Effects/IDuotone.h>
#include <DOM/Effects/IDuotoneEffectiveData.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/Effects/ILuminance.h>
#include <DOM/Effects/ILuminanceEffectiveData.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Effects;
using namespace System;

auto presentation = MakeObject<Presentation>(u"image-transform-chain.pptx");
auto slide = presentation->get_Slide(0);
SharedPtr<IPictureFrame> pictureFrame;

for (auto&& shape : slide->get_Shapes())
{
    if (ObjectExt::Is<IPictureFrame>(shape))
    {
        pictureFrame = ExplicitCast<IPictureFrame>(shape);
        break;
    }
}

if (pictureFrame != nullptr)
{
    auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();

    for (auto&& operation : imageTransform)
    {
        if (ObjectExt::Is<IBrightnessContrast>(operation))
        {
            auto brightnessContrast = ExplicitCast<IBrightnessContrast>(operation);
            auto data = brightnessContrast->GetEffective();
            Console::WriteLine(u"Brightness: {0}; contrast: {1}", data->get_Brightness(), data->get_Contrast());
        }
        else if (ObjectExt::Is<ILuminance>(operation))
        {
            auto luminance = ExplicitCast<ILuminance>(operation);
            auto data = luminance->GetEffective();
            Console::WriteLine(u"Brightness: {0}; contrast: {1}", data->get_Brightness(), data->get_Contrast());
        }
        else if (ObjectExt::Is<IDuotone>(operation))
        {
            auto duotone = ExplicitCast<IDuotone>(operation);
            auto data = duotone->GetEffective();
            Console::WriteLine(u"Dark color: {0}; light color: {1}", data->get_Color1(), data->get_Color2());
        }
        else if (ObjectExt::Is<IBlur>(operation))
        {
            auto blur = ExplicitCast<IBlur>(operation);
            auto data = blur->GetEffective();
            Console::WriteLine(u"Blur radius: {0} pt", data->get_Radius());
        }
        else if (ObjectExt::Is<IAlphaModulateFixed>(operation))
        {
            auto alphaModulate = ExplicitCast<IAlphaModulateFixed>(operation);
            auto data = alphaModulate->GetEffective();
            Console::WriteLine(u"Alpha amount: {0}%", data->get_Amount());
        }
    }
}

presentation->Dispose();

पैरामीटर‑रहित प्रभाव जैसे ग्रेस्केल, अल्फा सीलिंग, और अल्फा इनवर्स के भी प्रभावी‑डेटा वस्तु होती है, लेकिन प्रिंट करने के लिए कोई स्केलर सेटिंग नहीं होती। उनकी उपस्थिति एवं संग्रह में स्थिति ही महत्वपूर्ण सूचना होती है।

छवि रूपांतरण हटाएं या साफ़ करें

एक ऑपरेशन को इंडेक्स द्वारा हटाने के लिए IImageTransformOperationCollection::RemoveAt का उपयोग करें। चूँकि हटाने के बाद इंडेक्स शिफ्ट होते हैं, पहले लक्ष्य को खोजें और गिनती के बाद उसे हटाएँ। पूरी श्रृंखला को हटाने के लिए Clear() का उपयोग करें।

#include <DOM/Effects/IBlur.h>
#include <DOM/Effects/IImageTransformOperationCollection.h>
#include <DOM/IPictureFillFormat.h>
#include <DOM/IPictureFrame.h>
#include <DOM/IShapeCollection.h>
#include <DOM/ISlide.h>
#include <DOM/ISlidesPicture.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/smart_ptr.h>

using namespace Aspose::Slides;
using namespace Aspose::Slides::Effects;
using namespace Aspose::Slides::Export;
using namespace System;

auto presentation = MakeObject<Presentation>(u"image-transform-chain.pptx");
auto slide = presentation->get_Slide(0);
SharedPtr<IPictureFrame> pictureFrame;

for (auto&& shape : slide->get_Shapes())
{
    if (ObjectExt::Is<IPictureFrame>(shape))
    {
        pictureFrame = ExplicitCast<IPictureFrame>(shape);
        break;
    }
}

if (pictureFrame != nullptr)
{
    auto imageTransform = pictureFrame->get_PictureFormat()->get_Picture()->get_ImageTransform();
    auto blurIndex = -1;

    for (auto index = 0; index < imageTransform->get_Count(); ++index)
    {
        if (ObjectExt::Is<IBlur>(imageTransform->idx_get(index)))
        {
            blurIndex = index;
            break;
        }
    }

    if (blurIndex >= 0)
    {
        imageTransform->RemoveAt(blurIndex);
        Console::WriteLine(u"The blur operation was removed.");
    }

    imageTransform->Clear();
    Console::WriteLine(u"Remaining operations: {0}", imageTransform->get_Count());
    presentation->Save(u"image-transforms-cleared.pptx", SaveFormat::Pptx);
}

presentation->Dispose();

रूपांतरण हटाने या साफ़ करने से केवल चित्र फ़ॉर्मेटिंग बदलती है। यह पुनः उपयोग किए गए IPPImage संसाधन को हटाता, पुनः‑संपीड़ित करता या अन्यथा परिवर्तित नहीं करता।

प्रेजेंटेशन फ़ॉर्मेट और निर्यात लक्ष्यों पर विचार करें

छवि रूपांतरण DrawingML में उत्पन्न होते हैं, इसलिए PPTX प्रभाव श्रृंखलाओं के लिए प्राथमिक संपादन योग्य स्वरूप है। PPTX के साथ भी, सभी ऑपरेशनों की पोर्टेबिलिटी समान नहीं है:

  • मानक DrawingML ऑपरेशन जैसे ल्यूमिनेंस, ग्रेस्केल, डुओटोन, टिंट, HSL, ब्लर, और सामान्य अल्फा ऑपरेशन PPTX राउंड‑ट्रिप में जीवित रहने की सबसे अधिक संभावना रखते हैं। जब संरक्षण आवश्यक हो तो उत्पन्न फ़ाइल को हमेशा पुनः खोलें और संग्रह का निरीक्षण करें।
  • BrightnessContrast Office 2010 विस्तार है, न कि मानक DrawingML ल्यूमिनेंस ऑपरेशन। इसे केवल‑इन‑मेमोरी रेंडरिंग के लिए उपयोग किया जा सकता है, लेकिन सहेजने और PPTX को पुनः खोलने के बाद यह संपादन योग्य IBrightnessContrast के रूप में बना रहना गारंटी नहीं है। निरंतर चमक और कंट्रास्ट समायोजन के लिए AddLuminanceEffect को प्राथमिकता दें।
  • बाइनरी PPT स्वरूप DrawingML प्रभाव मॉडल से पूर्व का है। PPT में सहेजने पर असमर्थित ऑपरेशन छोड़े जा सकते हैं, श्रृंखला को समर्थित उपसमुच्चय में घटाया जा सकता है, या रूप दिखाने के लिए अनुमानित किया जा सकता है। जटिल संपादन योग्य श्रृंखला के सत्यापन के लिये PPT का उपयोग न करें।
  • PNG, JPEG, TIFF, PDF, SVG, HTML या अन्य दृश्य आउटपुट में रेंडरिंग समर्थित श्रृंखला को रेंडर किए गए रूप में लागू करती है। इन आउटपुट में संपादन योग्य IImageTransformOperationCollection नहीं होता; रास्टर स्वरूप परिणाम को पिक्सेल में फ्लैट कर देते हैं, और दस्तावेज़ या वेक्टर निर्यात अपनी स्वयं की रेंडरिंग प्रतिनिधित्व संग्रहीत करते हैं।
  • प्रभाव लिंक्ड छवि को आत्मनिर्भर नहीं बनाते। लिंक्ड चित्र को रेंडर करने के लिये प्रस्तुति लोड होते समय लिंक्ड संसाधन उपलब्ध होना आवश्यक है।

विभिन्न प्रस्तुति उपभोक्ता किनारा‑केस को अलग‑अलग रेंडर कर सकते हैं, विशेष रूप से जब कई अल्फा या रंग‑क्वांटाइज़िंग ऑपरेशन सम्मिलित हों। महत्वपूर्ण आउटपुट के लिये, संपादन योग्य राउंड‑ट्रिप और अंतिम निर्यात स्वरूप दोनों को उसी Aspose.Slides संस्करण के साथ परीक्षण करें जो उत्पादन में उपयोग हो रहा है।

FAQ

क्या छवि रूपांतरण प्रभाव एम्बेडेड छवि डेटा को संशोधित करते हैं?

नहीं। ऑपरेशन ISlidesPicture से संबंधित होते हैं जो चित्र फ़िल द्वारा उपयोग किए जाते हैं। अंतर्निहित IPPImage बाइट्स अपरिवर्तित रहती हैं।

क्या दो चित्र फ्रेम जो समान छवि को पुन: उपयोग करते हैं, अपने प्रभाव साझा करेंगे?

नहीं। IPPImage को पुन: उपयोग करने से दोहराव वाली छवि डेटा बचती है, लेकिन प्रत्येक चित्र फ्रेम सामान्यतः अलग ISlidesPicture और अलग छवि रूपांतरण संग्रह रखता है।

क्या रंग, ब्लर, और अल्फा प्रभावों को संयोजित किया जा सकता है?

हां। संग्रह उन्हें एक क्रमबद्ध श्रृंखला में स्वीकार करता है। प्रत्येक ऑपरेशन के पिछले आउटपुट पर प्रभाव को ध्यान में रखें, क्योंकि प्रतिस्थापन और थ्रेशहोल्ड ऑपरेशन पहले के रंग या अल्फा विवरण को हटा सकते हैं।

प्रभावी मान केवल‑पढ़ने‑योग्य क्यों होते हैं?

प्रभावी डेटा रेंडरिंग के लिये उपयोग किए गए गणना किए गए मान दर्शाता है, जिसमें हल किए गए रंग शामिल होते हैं। उन ऑपरेशनों को संपादित करें जहाँ लिखने योग्य सदस्य मौजूद हों; अन्यथा उन्हें हटाएँ और नई निर्माण पैरामीटर के साथ प्रतिस्थापन जोड़ें।

कौन‑सा स्वरूप उपयोग करना चाहिए ताकि रूपांतरण श्रृंखला संरक्षित रहे?

PPTX का उपयोग करें और फ़ाइल को पुनः खोलकर सत्यापित करें। लेगेसी PPT पूर्ण DrawingML प्रभाव मॉडल को नहीं दर्शा सकता, और रेंडर किए गए निर्यात स्वरूप केवल रूप दिखाते हैं, न कि संपादन योग्य रूपांतरण ऑपरेशन।