إدارة تأثيرات تحويل الصور في العروض التقديمية باستخدام Java

نظرة عامة

Aspose.Slides يمثل تعديلات الصورة كمجموعة مرتبة من عمليات تحويل الصورة. لإطار صورة، ابدأ بـ ISlidesPicture ثم احصل على ISlidesPicture.getImageTransform. المجموعة التي يتم إرجاعها من IImageTransformOperationCollection تسمح لك بإضافة، تعداد، فحص، إزالة، ومسح التأثيرات دون إعادة كتابة بايتات الصورة الأصلية.

توضح هذه المقالة سير عمل كامل للسطوع والتباين، تحويلات الألوان، التشويش، الشفافية، سلاسل التأثير المرتبة، القيم الفعّالة، الإزالة، والتحقق من جولة PPTX.

فهم ملكية التأثير وإعادة استخدام الصورة

مصدر الصورة والصورة التي تعرضه كائنات مختلفة:

  • IPPImage يخزن أو يشير إلى بيانات الصورة المصدر التي تملكها العرض.
  • ISlidesPicture تنتمي إلى تعبئة الصورة وتشير إلى مورد صورة مع تخزين مجموعة تحويل الصورة.
  • IPictureFrame هو شكل الشريحة الذي يملك تعبئة الصورة ذات الصلة، الهندسة، إعدادات الاقتصاص، وتنسيق المستوى الإطاري الآخر.

لذلك، عمليات تحويل الصورة لا تعدّل البايتات في IPPImage. عندما يتم تمرير نفس IPPImage إلى IShapeCollection.addPictureFrame أكثر من مرة، يحصل كل إطار صورة جديد على ISlidesPicture خاص به ومجموعة تحويل خاصة به. تطبيق تدرج الرمادي على إطار واحد لا يجعل الأطر الأخرى تدرج رمادي، رغم أن جميعها تعيد استخدام نفس مورد الصورة المضمّن.

نموذج ISlidesPicture.getImageTransform نفسه يُستخدم أيضًا بواسطة تعبئات صور أخرى، مثل شكل أو خلفية شريحة. التركيز في الأمثلة أدناه يكون على إطارات الصور.

استخدام نطاقات المعاملات والوحدات الصالحة

الطرق المعروضة تستخدم النطاقات والمعاني الدلالية التالية. احتفظ بالقيم داخل هذه النطاقات حتى إذا لم ترفض نسخة المكتبة المحددة القيمة الخارجة عن النطاق على الفور؛ قد يقوم تنسيق العرض المستهدف بالتطبيع أو الإغفال أو الرفض أثناء الحفظ أو عند فتح الملف في PowerPoint.

العملية المعاملات النطاق والوحدة الصالحة
addBrightnessContrastEffect brightness, contrast -100 إلى 100، نسبة مئوية؛ 0 يترك المكوّن دون تغيير.
addGrayScaleEffect None لا معاملات عددية. لا يتغيّر ألفا.
addDuotoneEffect color1, color2 لونان للبيكسلات الداكنة والفاتحة. القنوات RGB و Alpha في java.awt.Color تستخدم 0 إلى 255.
addTintEffect hue, amount الـ hue من 0 شامل إلى 360 غير شامل، بالدرجات؛ الكمية من -100 إلى 100، نسبة مئوية.
addHSLEffect hue, saturation, luminance الـ hue من 0 شامل إلى 360 غير شامل، بالدرجات؛ التشبع والإضاءة من -100 إلى 100، نسبة مئوية.
addColorReplaceEffect color لون الاستبدال يستخدم قيم القناة من 0 إلى 255. قيم Alpha الحالية لا تتغيّر.
addBlurEffect radius, grow الـ radius غير سالب ويقاس بالنقاط؛ grow هو Boolean يتحكم فيما إذا كان المحتوى المشوش قد يخرج خارج الحدود الأصلية.
addAlphaModulateFixedEffect amount نسبة مئوية غير سلبية. استخدم 0 إلى 100 لتعديل الشفافية العادي: 0 شفاف تماماً و100 يحافظ على Alpha الحالي.
addAlphaReplaceEffect alpha 0 إلى 100، نسبة مئوية للشفافية.
addAlphaBiLevelEffect threshold 0 إلى 100، نسبة مئوية للحد Alpha. القيم الأقل تصبح شفافة؛ القيم بالمساواة أو الأعلى تصبح غير شفافة.

بالنسبة لتعديل Alpha الثابت، الشفافية والعتامة متكاملتان. على سبيل المثال، الشفافية بنسبة 35 % تعادل مقدار تعديل Alpha بنسبة 65 %.

تطبيق السطوع والتباين

IImageTransformOperationCollection.addBrightnessContrastEffect تُعيد عملية IBrightnessContrast. تُزوَّد إعداداته القياسية عند إنشاء العملية. IBrightnessContrast.getEffective تُعيد القيم المحسوبة للقراءة فقط التي يمكن فحصها أو تسجيلها.

المثال التالي يزيد السطوع بنسبة 15 % والتباين بنسبة 20 %، ثم يعرض معاينة دون تعديل الصورة المضمَّنة:

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    byte[] imageData = Files.readAllBytes(Paths.get("photo.png"));
    IPPImage image = presentation.getImages().addImage(imageData);
    IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 400, 260, image);

    IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    IBrightnessContrast brightnessContrast = imageTransform.addBrightnessContrastEffect(15f, 20f);

    IBrightnessContrastEffectiveData effectiveValues = brightnessContrast.getEffective();
    System.out.println("Brightness: " + effectiveValues.getBrightness() + "%");
    System.out.println("Contrast: " + effectiveValues.getContrast() + "%");

    IImage preview = slide.getImage();
    try {
        preview.save("brightness-contrast-preview.png", ImageFormat.Png);
    } finally {
        preview.dispose();
    }
} finally {
    presentation.dispose();
}

BrightnessContrast هو امتداد تأثير صورة لـ Office 2010 وهو أقل قابلية للنقل من تأثير الإضاءة القياسي في DrawingML. عندما يجب أن يبقى السطوع والتباين قابلة للتحرير بعد جولة PPTX، استخدم IImageTransformOperationCollection.addLuminanceEffect وتحقق من النتيجة بعد إعادة فتح الملف. يوضح قسم قيود الصيغة هذا التمييز بمزيد من التفصيل.

تطبيق تحويلات اللون

يمكن تطبيق تأثيرات اللون بشكل مستقل على إطارات صور مختلفة تعيد استخدام مورد صورة واحد. المثال التالي ينشئ خمسة إطارات ويطبق تدرج رمادي، ثنائي اللون، صبغة، تعديل HSL، واستبدال اللون.

IDuotone يحتوي على معاملين لونيين قابلين للتحرير بشكل مستقل: color1 يطابق البيكسلات الداكنة، بينما color2 يطابق البيكسلات الفاتحة. هذا يجعله مثالاً مفيداً لتأثير تكون إعداداته أكثر تعقيداً من قيمة قياسية واحدة.

import com.aspose.slides.*;
import java.awt.Color;
import java.nio.file.Files;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    byte[] imageData = Files.readAllBytes(Paths.get("photo.png"));
    IPPImage image = presentation.getImages().addImage(imageData);

    IPictureFrame grayFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 180, 120, image);
    grayFrame.getPictureFormat().getPicture().getImageTransform().addGrayScaleEffect();

    IPictureFrame duotoneFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 220, 20, 180, 120, image);
    IDuotone duotone = duotoneFrame.getPictureFormat().getPicture().getImageTransform().addDuotoneEffect();
    duotone.getColor1().setColor(new Color(0, 0, 128));
    duotone.getColor2().setColor(new Color(255, 215, 0));

    IPictureFrame tintFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 420, 20, 180, 120, image);
    tintFrame.getPictureFormat().getPicture().getImageTransform().addTintEffect(210f, 35f);

    IPictureFrame hslFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 120, 170, 180, 120, image);
    hslFrame.getPictureFormat().getPicture().getImageTransform().addHSLEffect(30f, 20f, -10f);

    IPictureFrame replacementFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 320, 170, 180, 120, image);
    IColorReplace colorReplacement = replacementFrame.getPictureFormat().getPicture().getImageTransform().addColorReplaceEffect();
    colorReplacement.getColor().setColor(new Color(100, 149, 237));

    presentation.save("color-transformations.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

addColorReplaceEffect يستبدل لون كل بيكسل بلون ثابت واحد مع الحفاظ على Alpha. يختلف عن addColorChangeEffect الذي يطابق لون مصدر بلون هدف ويعرض صيغ كل من اللون المصدر والهدف.

إضافة التشويش، الشفافية، وتأثيرات Alpha

addBlurEffect يؤثر على جميع قنوات اللون، بما فيها Alpha. اضبط grow إلى true عندما قد يمتد حافة التشويش خارج حدود الصورة الأصلية.

للشفافية الموحدة، استخدم addAlphaModulateFixedEffect. إنه يضرب كل قيمة Alpha موجودة، لذا تبقى البيكسلات ذات الشفافية الجزئية ذات فرق نسبي. addAlphaReplaceEffect يعيّن قيمة Alpha واحدة لجميع البيكسلات. addAlphaBiLevelEffect يحول Alpha إلى مستويين بناءً على حد معين.

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    byte[] imageData = Files.readAllBytes(Paths.get("photo.png"));
    IPPImage image = presentation.getImages().addImage(imageData);

    IPictureFrame blurredFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 140, image);
    IBlur blur = blurredFrame.getPictureFormat().getPicture().getImageTransform().addBlurEffect(4.5, true);
    blur.setRadius(5);

    IPictureFrame transparentFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 240, 20, 200, 140, image);
    IAlphaModulateFixed alphaModulate = transparentFrame.getPictureFormat().getPicture().getImageTransform().addAlphaModulateFixedEffect(65f);
    alphaModulate.setAmount(60f);

    IPictureFrame uniformAlphaFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 180, 200, 140, image);
    uniformAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaReplaceEffect(55f);

    IPictureFrame binaryAlphaFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 240, 180, 200, 140, image);
    IAlphaBiLevel alphaBiLevel = binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaBiLevelEffect(50f);
    alphaBiLevel.setThreshold(45f);
    binaryAlphaFrame.getPictureFormat().getPicture().getImageTransform().addAlphaInverseEffect();

    presentation.save("blur-and-alpha-effects.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

تشمل عمليات Alpha دون معاملات أخرى addAlphaCeilingEffect، التي تجعل كل Alpha غير صفرية غير شفافة تماماً؛ addAlphaFloorEffect، التي تجعل كل Alpha أقل من 100 % شفافة تماماً؛ وaddAlphaInverseEffect، التي تغير Alpha إلى 100% - alpha.

بناء سلسلة تأثير مرتبة

كل طريقة add...Effect تُضيف عملية جديدة إلى نهاية المجموعة. يستخدم المُصوِّر المجموعة كخط أنابيب مرتّب: ناتج العملية 0 يصبح مدخل العملية 1، وهكذا. وبالتالي، قد تُنتج نفس العمليات بترتيب مختلف صورة مختلفة.

على سبيل المثال، تدرج رمادي يليه صبغة يزيل أولاً المعلومات اللونية ثم يعيد تلوين النتيجة الضوئية. صبغة يليه تدرج رمادي يزيل الصبغة مرة أخرى. بالمثل، استبدال Alpha يمكنه أن يتجاوز قيم Alpha التي حسبتها عمليات سابقة، بينما تعديل Alpha يحافظ على الفروق النسبية بينها.

المثال التالي يبني سلسلة من أربع عمليات، يحفظها كـ PPTX، يفتح العرض مرة أخرى، يتحقق من نوعية العمليات وترتيبها، ثم يعرض النتيجة المعاد فتحها:

import com.aspose.slides.*;
import java.nio.file.Files;
import java.nio.file.Paths;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    byte[] imageData = Files.readAllBytes(Paths.get("photo.png"));
    IPPImage image = presentation.getImages().addImage(imageData);
    IPictureFrame pictureFrame = slide.getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 400, 260, image);

    IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
    imageTransform.addGrayScaleEffect();
    imageTransform.addTintEffect(220f, 25f);
    imageTransform.addBlurEffect(2.5, false);
    imageTransform.addAlphaModulateFixedEffect(80f);

    presentation.save("image-transform-chain.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Presentation reopenedPresentation = new Presentation("image-transform-chain.pptx");
try {
    IShape reopenedShape = reopenedPresentation.getSlides().get_Item(0).getShapes().get_Item(0);

    if (reopenedShape instanceof IPictureFrame) {
        IPictureFrame reopenedFrame = (IPictureFrame) reopenedShape;
        IImageTransformOperationCollection reopenedTransform = reopenedFrame.getPictureFormat().getPicture().getImageTransform();
        boolean orderIsPreserved = reopenedTransform.size() == 4 && 
                reopenedTransform.get_Item(0) instanceof IGrayScale && 
                reopenedTransform.get_Item(1) instanceof ITint && 
                reopenedTransform.get_Item(2) instanceof IBlur && 
                reopenedTransform.get_Item(3) instanceof IAlphaModulateFixed;
        System.out.println(orderIsPreserved ? "The effect chain was preserved." : "The effect chain changed during the round trip.");

        IImage renderedSlide = reopenedPresentation.getSlides().get_Item(0).getImage();
        try {
            renderedSlide.save("reopened-effect-chain.png", ImageFormat.Png);
        } finally {
            renderedSlide.dispose();
        }
    } else {
        System.out.println("The reopened shape is not a picture frame.");
    }
} finally {
    reopenedPresentation.dispose();
}

المجموعة لا تفرض مصفوفة توافق تقيد عمليات اللون، Alpha، والتشويش إلى سلاسل منفصلة. يمكن دمجها، لكن ليس كل الدمجات مفيدة. استبدال اللون الثابت يزيل تباين RGB الناتج عن تأثيرات لونية سابقة؛ تدرج رمادي بعد ثنائي اللون يزيل اللونين المختارين؛ عمليات Alpha السقفية، الأرضية، الاستبدال أو الثنائية قد تتجاهل تفاصيل Alpha التي أنشئت سابقاً. ابنِ السلسلة وفقاً لتسلسل معالجة البيكسل المرغوب بدلاً من اعتبار عناصرها كأعلام تنسيق غير مرتبة.

فحص القيم القابلة للتحرير والفعّالة

العملية القابلة للتحرير هي الكائن المخزن في ISlidesPicture.getImageTransform. اعتماداً على التأثير، قد تُظهر أعضاء قابلة للكتابة مباشرة. على سبيل المثال، IBlur يُظهر قيم radius و grow القابلة للكتابة، IAlphaModulateFixed يُظهر amount القابل للكتابة، وIAlphaBiLevel يُظهر threshold القابل للكتابة. تأثيرات اللون مثل IDuotone تُظهر كائنات IColorFormat قابلة للتعديل.

بعض واجهات العمليات، بما فيها IBrightnessContrast، IHSL، ITint، وIAlphaReplace، لا تُظهر المتغيّرات الإنشائية كخصائص قابلة للكتابة. لتغيير تلك الإعدادات، احذف العملية وأضف بديلة في الموقع المطلوب.

البيانات الفعّالة التي تُعيدها getEffective() محسوبة ولا يمكن تعديلها. هي مفيدة لحل ألوان تعتمد على السمة وقراءة القيم المُعَدلَة التي يستخدمها المُصوِّر، لكنها ليست سطح تحرير آخر. المثال التالي يُعدد السلسلة ويفحص القيم الفعّالة حيث تُوفر الـ API ما يلزم:

import com.aspose.slides.*;

Presentation presentation = new Presentation("image-transform-chain.pptx");
try {
    IPictureFrame pictureFrame = null;

    for (IShape shape : presentation.getSlides().get_Item(0).getShapes()) {
        if (shape instanceof IPictureFrame) {
            pictureFrame = (IPictureFrame) shape;
            break;
        }
    }

    if (pictureFrame != null) {
        IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();

        for (int index = 0; index < imageTransform.size(); index++) {
            IImageTransformOperation operation = imageTransform.get_Item(index);
            System.out.println(index + ": " + operation.getClass().getSimpleName());

            if (operation instanceof IBrightnessContrast) {
                IBrightnessContrastEffectiveData data = ((IBrightnessContrast) operation).getEffective();
                System.out.println("  Brightness: " + data.getBrightness());
                System.out.println("  Contrast: " + data.getContrast());
            } else if (operation instanceof ILuminance) {
                ILuminanceEffectiveData data = ((ILuminance) operation).getEffective();
                System.out.println("  Brightness: " + data.getBrightness());
                System.out.println("  Contrast: " + data.getContrast());
            } else if (operation instanceof IDuotone) {
                IDuotoneEffectiveData data = ((IDuotone) operation).getEffective();
                System.out.println("  Dark color: " + data.getColor1());
                System.out.println("  Light color: " + data.getColor2());
            } else if (operation instanceof IColorReplace) {
                IColorReplaceEffectiveData data = ((IColorReplace) operation).getEffective();
                System.out.println("  Replacement color: " + data.getColor());
            } else if (operation instanceof IHSL) {
                IHSLEffectiveData data = ((IHSL) operation).getEffective();
                System.out.println("  HSL: " + data.getHue() + ", " + data.getSaturation() + ", " + data.getLuminance());
            } else if (operation instanceof ITint) {
                ITintEffectiveData data = ((ITint) operation).getEffective();
                System.out.println("  Tint: " + data.getHue() + ", " + data.getAmount());
            } else if (operation instanceof IBlur) {
                IBlurEffectiveData data = ((IBlur) operation).getEffective();
                System.out.println("  Blur radius: " + data.getRadius() + " pt");
            } else if (operation instanceof IAlphaModulateFixed) {
                IAlphaModulateFixedEffectiveData data = ((IAlphaModulateFixed) operation).getEffective();
                System.out.println("  Alpha amount: " + data.getAmount() + "%");
            } else if (operation instanceof IAlphaReplace) {
                IAlphaReplaceEffectiveData data = ((IAlphaReplace) operation).getEffective();
                System.out.println("  Replacement alpha: " + data.getAlpha() + "%");
            } else if (operation instanceof IAlphaBiLevel) {
                IAlphaBiLevelEffectiveData data = ((IAlphaBiLevel) operation).getEffective();
                System.out.println("  Alpha threshold: " + data.getThreshold() + "%");
            }
        }
    }
} finally {
    presentation.dispose();
}

التأثيرات دون معلمات مثل تدرج الرمادي، السقيفة، والعكس Alpha لا يزال لها كائن بيانات فعّالة، ولكن لا توجد إعدادات قياسية للطباعة. وجودها وموقعها في المجموعة هو ما يهم.

إزالة أو مسح تحويلات الصورة

استخدم IImageTransformOperationCollection.removeAt لإزالة عملية واحدة بحسب الفهرس. نظرًا لأن الفهارس تت Shift بعد الإزالة، ابحث أولاً عن الهدف ثم احذفه بعد التعداد. استخدم ImageTransformOperationCollection.clear لإزالة السلسلة بالكامل.

import com.aspose.slides.*;

Presentation presentation = new Presentation("image-transform-chain.pptx");
try {
    IPictureFrame pictureFrame = null;

    for (IShape shape : presentation.getSlides().get_Item(0).getShapes()) {
        if (shape instanceof IPictureFrame) {
            pictureFrame = (IPictureFrame) shape;
            break;
        }
    }

    if (pictureFrame != null) {
        IImageTransformOperationCollection imageTransform = pictureFrame.getPictureFormat().getPicture().getImageTransform();
        int blurIndex = -1;

        for (int index = 0; index < imageTransform.size(); index++) {
            if (imageTransform.get_Item(index) instanceof IBlur) {
                blurIndex = index;
                break;
            }
        }

        if (blurIndex >= 0) {
            imageTransform.removeAt(blurIndex);
            System.out.println("The blur operation was removed.");
        }

        imageTransform.clear();
        System.out.println("Remaining operations: " + imageTransform.size());
        presentation.save("image-transforms-cleared.pptx", SaveFormat.Pptx);
    }
} finally {
    presentation.dispose();
}

إزالة أو مسح التحويلات يغيّر فقط تنسيق الصورة. لا يحذف، يعيد ضغط، أو يغيّر مورد IPPImage المعاد استخدامه.

مراعاة صيغ العروض وأهداف التصدير

تنشأ تحويلات الصورة في DrawingML، لذا فإن PPTX هو الصيغة القابلة للتحرير المفضلة لسلاسل التأثير. حتى مع PPTX، ليست كل عملية لها قابلية نقل متساوية:

  • عمليات DrawingML القياسية مثل الإضاءة، تدرج الرمادي، ثنائي اللون، الصبغة، HSL، التشويش، والعمليات Alpha الشائعة لديها أفضل فرصة للبقاء بعد جولة PPTX. احرص دائمًا على إعادة فتح الملف المُنشأ وتفحص المجموعة عندما تكون المحافظة مطلوبة.
  • BrightnessContrast هو امتداد Office 2010 وليس عملية إضاءة DrawingML القياسية. يمكن استخدامه للتصوير داخل الذاكرة، لكنه ليس مضمونًا أن يظل كـ IBrightnessContrast قابل للتحرير بعد حفظ وإعادة فتح PPTX. الأفضلية لـ addLuminanceEffect للتعديلات المستمرة للسطوع والتباين.
  • صيغة PPT الثنائية سابقة لنموذج تأثير DrawingML الكامل. قد يحذف الحفظ إلى PPT عمليات غير مدعومة، أو يقلل السلسلة إلى مجموعة جزئية مدعومة، أو يُقرب المظهر. لا تستخدم PPT كصيغة تحقق لسلسلة تحريرية معقدة.
  • التصيير إلى PNG، JPEG، TIFF، PDF، SVG، HTML أو أي مخرجات بصرية أخرى يطبق السلسلة المدعومة على المظهر المصور. تلك المخرجات لا تحتوي على IImageTransformOperationCollection قابلة للتحرير؛ صيغ Raster تُسقِط النتيجة إلى بيكسلات، وتصديرات المستند/الرسوم المتجهة تخزن تمثيلها الخاص للتصوير.
  • التأثيرات لا تجعل الصورة المرتبطة ذاتيًا. لا يزال تصوير صورة مرتبطة يعتمد على توفر المورد المرتبط عند تحميل العرض.

قد تُظهر مستهلكات العروض المختلفة الحالات الحدية بطرق مختلفة، خاصة عندما تُدمج عدة عمليات Alpha أو عمليات تكميم ألوان. للنتائج الحرجة، اختبر كلًا من جولة التحرير النهائية وصيغة التصدير النهائية باستخدام نفس نسخة Aspose.Slides المستخدمة في الإنتاج.

الأسئلة المتكررة

هل تعدّل تأثيرات تحويل الصورة بيانات الصورة المضمَّنة؟

لا. العمليات تنتمي إلى ISlidesPicture المستخدمة في تعبئة الصورة. تبقى بايتات IPPImage الأساسية دون تغيير.

هل تتشارك إطارات الصورة التي تُعيد استخدام نفس الصورة تأثيراتها؟

لا. إعادة استخدام IPPImage تُجنّب تكرار بيانات الصورة، لكن كل إطار صورة عادةً ما يكون له ISlidesPicture خاص به ومجموعة تحويل منفصلة.

هل يمكن دمج تأثيرات اللون، التشويش، وAlpha؟

نعم. تقبل المجموعة دمجها في سلسلة مرتّبة واحدة. ضع في اعتبارك ما تفعله كل عملية على مخرج العملية السابقة لأن عمليات الاستبدال والحد قد تتخلص من تفاصيل اللون أو Alpha السابقة.

لماذا القيم الفعّالة للقراءة فقط؟

البيانات الفعّالة تمثل القيم المحسوبة المستخدمة في التصيير، بما فيها الألوان المُحَلَّة. حرّر العملية المخزنة في مجموعة التحويل حيث توجد أعضاء قابلة للكتابة؛ وإلا احذفها وأضف بديلة بمعلمات إنشائية جديدة.

أي صيغة يجب أن أستخدمها للحفاظ على سلسلة التحويل؟

استخدم PPTX وتحقق من الملف بإعادة فتحه. لا يمكن لصيغة PPT القديمة تمثيل نموذج تأثير DrawingML الكامل، وتُحافظ صيغ التصدير المصورة على المظهر فقط وليس على عمليات التحويل القابلة للتحرير.