إدارة تأثيرات تحويل الصور في العروض التقديمية على Android

نظرة عامة

يمثل 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 لا شيء لا توجد معلمات رقمية. قيمة ألفا تبقى دون تعديل.
addDuotoneEffect color1, color2 لونان للبكسلات الداكنة والفاتحة. قيم قنوات RGB وألفا المستخدمة بواسطة android.graphics.Color تتراوح من 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%، ثم يعرض معاينة دون تعديل الصورة المضمّنة:

import com.aspose.slides.*;

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

    IPPImage image;
    IImage sourceImage = Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }
    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 android.graphics.Color;

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

    IPPImage image;
    IImage sourceImage = Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

    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(Color.rgb(0, 0, 128));
    duotone.getColor2().setColor(Color.rgb(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(Color.rgb(100, 149, 237));

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

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

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

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

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

import com.aspose.slides.*;

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

    IPPImage image;
    IImage sourceImage = Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }

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

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

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

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

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IPPImage image;
    IImage sourceImage = Images.fromFile("photo.png");
    try {
        image = presentation.getImages().addImage(sourceImage);
    } finally {
        sourceImage.dispose();
    }
    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();
}

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

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

العملية القابلة للتحرير هي الكائن المخزّن في 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();
}

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

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

استخدم 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، التشويش، والعمليات الشائعة للألفا لديها أفضل فرصة للبقاء بعد دورة PPTX. دائمًا أعد فتح الملف المُنتج وتفقد المجموعة عندما يكون الحفاظ مطلوبًا.
  • BrightnessContrast هو امتداد Office 2010 وليس عملية اللمعان القياسية في DrawingML. يمكن استخدامه للعرض في الذاكرة، لكنه غير مضمون أن يبقى كـIBrightnessContrast قابل للتحرير بعد الحفظ وإعادة الفتح. فضلًا عن ذلك استخدم addLuminanceEffect لتعديلات السطوع والتباين المستمرة.
  • صيغة PPT الثنائية سابقة لنموذج تأثير DrawingML الكامل. قد يحذف حفظ إلى PPT عمليات غير مدعومة، يقلّل السلسلة إلى مجموعة فرعية مدعومة، أو يقرّب المظهر. لا تستخدم PPT كصيغة تحقق لسلسلة تحريرية معقدة.
  • التصدير إلى PNG أو JPEG أو TIFF أو PDF أو SVG أو HTML أو أي مخرج بصري آخر يطبق السلسلة المدعومة على النتيجة المرئية. هذه المخرجات لا تحتوي على [IImageTransformOperationCollection] قابلة للتحرير؛ تنسيق الرستر يسطّح النتيجة إلى بكسلات، وتصديرات المستند/الفيكتور تخزن تمثيلها الخاص للعرض.
  • التأثيرات لا تجعل الصورة المرتبطة مستقلة. لا يزال عرض صورة مرتبطة يعتمد على توفر المورد المرتبط عند تحميل العرض.

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

الأسئلة الشائعة

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

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

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

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

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

نعم. تقبل المجموعة دمجها في سلسلة واحدة مرتبة. تأمل ما يفعله كل عملية على ناتج السابقة لأن عمليات الاستبدال والعتبة قد تُزيل تفاصيل اللون أو الألفا السابقة.

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

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

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

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