TiffFrame

Inheritance: java.lang.Object, com.aspose.imaging.DisposableObject, com.aspose.imaging.DataStreamSupporter, com.aspose.imaging.Image, com.aspose.imaging.RasterImage, com.aspose.imaging.RasterCachedImage

public final class TiffFrame extends RasterCachedImage

إطار TIFF.

المنشئات

المنشئالوصف
TiffFrame(InputStream stream)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(InputStream stream, TiffOptions options)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(String path)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(String path, TiffOptions options)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(RasterImage image)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(RasterImage image, TiffOptions options)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.
TiffFrame(TiffOptions options, int width, int height)يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

الطرق

طريقةالوصف
getBackgroundColor()يحصل على قيمة لون الخلفية.
setBackgroundColor(Color value)يضبط قيمة لون الخلفية.
hasAlpha()يحصل على قيمة تشير إلى ما إذا كان هذا الكائن يحتوي على ألفا.
getBitsPerPixel()يحصل على عدد بتات الصورة لكل بكسل.
getFrameOptions()يحصل على خيارات إنشاء الإطار.
getHeight()يحصل على ارتفاع الصورة.
getWidth()يحصل على عرض الصورة.
getHorizontalResolution()يحصل على الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذه RasterImage.
setHorizontalResolution(double value)يضبط الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذه RasterImage.
getVerticalResolution()يحصل على الدقة الرأسية، بوحدة البكسل لكل بوصة، لهذه RasterImage.
setVerticalResolution(double value)يضبط الدقة الرأسية، بوحدة البكسل لكل بوصة، لهذه RasterImage.
getPathResources()يحصل على موارد المسار.
setPathResources(List value)يضبط موارد المسار.
removeMetadata()يزيل بيانات التعريف الخاصة بهذه الصورة عن طريق تعيين قيم IHasXmpData.XmpData (IHasXmpData.getXmpData/IHasXmpData.setXmpData(XmpPacketWrapper)) و IHasExifData.ExifData(IHasExifData.getExifData/IHasExifData.setExifData(ExifData) IHasExifData.setExifData) إلى null.
getOriginalOptions()يحصل على الخيارات بناءً على إعدادات الملف الأصلي.
alignResolutions()طريقة مساعدة لجعل الدقة الأفقية والرأسية متساوية.
copyFrame(TiffFrame tiffFrame)ينسخ الإطار بالكامل (نسخ مكررة).
createFrameFrom(TiffFrame tiffFrame, TiffOptions options)ينشئ الإطار من tiffFrame المحدد باستخدام options المحددة.
resize(int newWidth, int newHeight, int resizeType)يُعيد تحجيم الصورة.
rotateFlip(int rotateFlipType)يدور، يقلب، أو يدور ويقلب الصورة.
rotate(float angle, boolean resizeProportionally, Color backgroundColor)دوّر الصورة حول المركز.
crop(Rectangle rectangle)قص الصورة.

Example: This example shows how to create a TIFF image from scratch and save it to a file.

String dir = "c:\\temp\\";

com.aspose.imaging.imageoptions.TiffOptions createOptions =
        new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);

// تعيين 8 بت لكل مكوّن لوني.
createOptions.setBitsPerSample(new int[]{8, 8, 8});

// تعيين ترتيب البايتات Big Endian (Motorola)
createOptions.setByteOrder(com.aspose.imaging.fileformats.tiff.enums.TiffByteOrder.BigEndian);

// تعيين ضغط LZW.
createOptions.setCompression(com.aspose.imaging.fileformats.tiff.enums.TiffCompressions.Lzw);

// تعيين نموذج اللون RGB.
createOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.Rgb);

// ستُخزن جميع مكوّنات اللون في مستوى واحد.
createOptions.setPlanarConfiguration(com.aspose.imaging.fileformats.tiff.enums.TiffPlanarConfigs.Contiguous);

// إنشاء إطار TIFF بحجم 100×100 بكسل.
// لاحظ أنه لا يلزم التخلص من الإطار صراحةً إذا كان مُدرجًا في TiffImage.
// عند التخلص من الحاوية، سيتم التخلص من جميع الإطارات تلقائيًا.
com.aspose.imaging.fileformats.tiff.TiffFrame firstFrame = new com.aspose.imaging.fileformats.tiff.TiffFrame(createOptions, 100, 100);

// املأ الإطار بالكامل بالتدرج اللوني الأزرق-الأصفر.
com.aspose.imaging.brushes.LinearGradientBrush gradientBrush = new com.aspose.imaging.brushes.LinearGradientBrush(
        new com.aspose.imaging.Point(0, 0),
        new com.aspose.imaging.Point(firstFrame.getWidth(), firstFrame.getHeight()),
        com.aspose.imaging.Color.getBlue(),
        com.aspose.imaging.Color.getYellow());

com.aspose.imaging.Graphics graphics = new com.aspose.imaging.Graphics(firstFrame);
graphics.fillRectangle(gradientBrush, firstFrame.getBounds());

// إنشاء صورة TIFF.
com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = new com.aspose.imaging.fileformats.tiff.TiffImage(firstFrame);
try {
    tiffImage.save(dir + "output.tif");
} finally {
    tiffImage.dispose();
}

TiffFrame(InputStream stream)

public TiffFrame(InputStream stream)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
التدفقjava.io.InputStreamدفق التحميل للصورة وتتهيئة بيانات بكسل الإطار ولوحة الألوان باستخدامه.

TiffFrame(InputStream stream, TiffOptions options)

public TiffFrame(InputStream stream, TiffOptions options)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
التدفقjava.io.InputStreamدفق التحميل للصورة وتتهيئة بيانات بكسل الإطار ولوحة الألوان باستخدامه.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(String path)

public TiffFrame(String path)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
المسارjava.lang.Stringالمسار لتحميل الصورة وتتهيئة بيانات بكسل الإطار ولوحة الألوان باستخدامه.

TiffFrame(String path, TiffOptions options)

public TiffFrame(String path, TiffOptions options)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
المسارjava.lang.Stringالمسار لتحميل الصورة وتتهيئة بيانات بكسل الإطار ولوحة الألوان باستخدامه.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(RasterImage image)

public TiffFrame(RasterImage image)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
imageRasterImageالصورة لتتهيئة بيانات بكسل الإطار ولوحة الألوان بها.

TiffFrame(RasterImage image, TiffOptions options)

public TiffFrame(RasterImage image, TiffOptions options)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
imageRasterImageالصورة لتتهيئة بيانات بكسل الإطار ولوحة الألوان بها.
optionsTiffOptionsالخيارات لاستخدامها مع الإطار الذي تم إنشاؤه حديثًا.

TiffFrame(TiffOptions options, int width, int height)

public TiffFrame(TiffOptions options, int width, int height)

يُنشئ مثيلاً جديدًا من الفئة TiffFrame.

Parameters:

معاملنوعالوصف
optionsTiffOptionsخيارات الإطار.
العرضintالعرض.
الارتفاعintالارتفاع.

getBackgroundColor()

public Color getBackgroundColor()

يحصل على قيمة لون الخلفية.

Returns: Color

setBackgroundColor(Color value)

public void setBackgroundColor(Color value)

يضبط قيمة لون الخلفية.

Parameters:

معاملنوعالوصف
valueColor

hasAlpha()

public boolean hasAlpha()

يحصل على قيمة تشير إلى ما إذا كان هذا الكائن يحتوي على ألفا.

Returns: boolean - true إذا كان هذا الكائن يحتوي على ألفا؛ وإلا false.

Example: The following example loads a TIFF image and prints information about raw data format and alpha channel.

String dir = "c:\\temp\\";

String fileName = dir + "sample.tif";
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(fileName);
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    // إذا كان الإطار النشط لملف TIFF يحتوي على قناة ألفا، فإن صورة TIFF بأكملها تُعتبر ذات قناة ألفا.
    System.out.printf("ImageFile=%s, FileFormat=%s, HasAlpha=%s\r\n", fileName, tiffImage.getRawDataFormat(), tiffImage.hasAlpha());

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        System.out.printf("Frame=%s, FileFormat=%s, HasAlpha=%s\r\n", ++i, frame.getRawDataFormat(), frame.hasAlpha());
    }
} finally {
    image.dispose();
}

// قد يبدو الإخراج هكذا:
// ImageFile=c:\temp\sample.tif, FileFormat=RgbIndexed1Bpp, used channels: 1, HasAlpha=False
// Frame=1, FileFormat=RgbIndexed1Bpp, used channels: 1, HasAlpha=False
// Frame=2, FileFormat=RgbIndexed1Bpp, used channels: 1, HasAlpha=False

getBitsPerPixel()

public int getBitsPerPixel()

يحصل على عدد بتات الصورة لكل بكسل.

Returns: int - عدد بتات الصورة لكل بكسل.

getFrameOptions()

public TiffOptions getFrameOptions()

يحصل على خيارات إنشاء الإطار.

Returns: TiffOptions

getHeight()

public int getHeight()

يحصل على ارتفاع الصورة.

Returns: int - ارتفاع الصورة.

getWidth()

public int getWidth()

يحصل على عرض الصورة.

Returns: int - عرض الصورة.

getHorizontalResolution()

public double getHorizontalResolution()

يحصل على الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذه RasterImage.

Returns: double - الدقة الأفقية.

Example: The following example shows how to set horizontal/vertical resolution of a separate TIFF frame.

String dir = "c:\\temp\\";

// تحميل صورة TIFF من ملف.
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.tif");
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        // الحصول على الدقة الأفقية والعمودية لإطار TiffFrame.
        double horizontalResolution = frame.getHorizontalResolution();
        double verticalResolution = frame.getVerticalResolution();
        System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
        System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);

        if (horizontalResolution != 96.0 || verticalResolution != 96.0) {
            // استخدم طريقة SetResolution لتحديث قيمتي الدقة في استدعاء واحد.
            System.out.println("Set resolution values to 96 dpi");
            frame.setResolution(96.0, 96.0);

            System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
            System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);
        }

        ++i;
    }
} finally {
    image.dispose();
}

setHorizontalResolution(double value)

public void setHorizontalResolution(double value)

يضبط الدقة الأفقية، بوحدة البكسل لكل بوصة، لهذه RasterImage.

Parameters:

معاملنوعالوصف
القيمةdoubleالدقة الأفقية.

getVerticalResolution()

public double getVerticalResolution()

يحصل على الدقة الرأسية، بوحدة البكسل لكل بوصة، لهذه RasterImage.

Returns: double - الدقة العمودية.

Example: The following example shows how to set horizontal/vertical resolution of a separate TIFF frame.

String dir = "c:\\temp\\";

// تحميل صورة TIFF من ملف.
com.aspose.imaging.Image image = com.aspose.imaging.Image.load(dir + "sample.tif");
try {
    com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) image;

    int i = 0;
    for (com.aspose.imaging.fileformats.tiff.TiffFrame frame : tiffImage.getFrames()) {
        // الحصول على الدقة الأفقية والعمودية لإطار TiffFrame.
        double horizontalResolution = frame.getHorizontalResolution();
        double verticalResolution = frame.getVerticalResolution();
        System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
        System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);

        if (horizontalResolution != 96.0 || verticalResolution != 96.0) {
            // استخدم طريقة SetResolution لتحديث قيمتي الدقة في استدعاء واحد.
            System.out.println("Set resolution values to 96 dpi");
            frame.setResolution(96.0, 96.0);

            System.out.printf("The horizontal resolution of frame %s, pixels per inch: %s\r\n", i, horizontalResolution);
            System.out.printf("The vertical resolution, of frame %s, pixels per inch: %s\r\n", i, verticalResolution);
        }

        ++i;
    }
} finally {
    image.dispose();
}

setVerticalResolution(double value)

public void setVerticalResolution(double value)

يضبط الدقة الرأسية، بوحدة البكسل لكل بوصة، لهذه RasterImage.

Parameters:

معاملنوعالوصف
القيمةdoubleالدقة العمودية.

getPathResources()

public List<PathResource> getPathResources()

يحصل على موارد المسار.

القيمة: موارد المسار.

Returns: java.util.List<com.aspose.imaging.fileformats.tiff.pathresources.PathResource> - موارد المسار.

Example: The following example shows how to retrieve paths from TIFF image and display their names in the console.

try (TiffImage image = (TiffImage) Image.load("Sample.tif"))
{
    for (PathResource path : image.getActiveFrame().getPathResources())
    {
        System.out.println(path.getName());
    }
}

Example: The following example shows how to modify already existing Clipping Paths. يوضح المثال التالي كيفية تعديل مسارات القص الموجودة بالفعل. على سبيل المثال، يمكنك الاحتفاظ بمسار قص واحد فقط في الصورة.

try (TiffImage image = (TiffImage) Image.load("Sample.tif"))
{
    List<PathResource> paths = image.getActiveFrame().getPathResources();
    image.getActiveFrame().setPathResources(Collections.singletonList(paths.get(0)));
    image.save();
}

Example: Transfer Clipping Paths during export from TIFF to PSD image.

try (Image image = Image.load("Sample.tif"))
{
    image.save("SampleWithPaths.psd", new PsdOptions());
}

Example: Create Clipping Path manually.

static void main()
{
    try (TiffImage image = (TiffImage)Image.load("Sample.tif"))
    {
        PathResource res = new PathResource();
        res.setBlockId((short) 2000);                                                  // Block Id according to Photoshop specification
        res.setName("My Clipping Path");                                               // Path name
        res.setRecords(createRecords(0.2f, 0.2f, 0.8f, 0.2f, 0.8f, 0.8f, 0.2f, 0.8f)); // Create path records using coordinates
                    
        image.getActiveFrame().setPathResources(Collections.singletonList(res));

        image.save("ImageWithPath.tif");
    }
}

private static List<VectorPathRecord> createRecords(float ... coordinates)
{
    List<VectorPathRecord>  records = createBezierRecords(coordinates);                                  // Create Bezier records using coordinates

    LengthRecord lr = new LengthRecord(); // LengthRecord required by Photoshop specification
    lr.setOpen(false);                    // Lets create closed path
    lr.setRecordCount(records.size());    // Record count in the path
                
    records.add(0, lr);

    return records;
}

private static List<VectorPathRecord> createBezierRecords(float[] coordinates)
{
    List<VectorPathRecord> l = new LinkedList<VectorPathRecord>();
                
    for (int index = 0; index < coordinates.length - 1; index += 2)
    {
        PointF pt = new PointF(coordinates[index], coordinates[index + 1]);
        BezierKnotRecord br = new BezierKnotRecord();
        br.setPathPoints(new PointF[] {pt, pt, pt});
        l.add(br);
    }
                    
    return l;
}

setPathResources(List value)

public void setPathResources(List<PathResource> value)

يضبط موارد المسار.

القيمة: موارد المسار.

Parameters:

معاملنوعالوصف
القيمةjava.util.List<com.aspose.imaging.fileformats.tiff.pathresources.PathResource>موارد المسار.

removeMetadata()

public void removeMetadata()

يزيل بيانات التعريف الخاصة بهذه الصورة عن طريق تعيين قيم IHasXmpData.XmpData (IHasXmpData.getXmpData/IHasXmpData.setXmpData(XmpPacketWrapper)) و IHasExifData.ExifData(IHasExifData.getExifData/IHasExifData.setExifData(ExifData) IHasExifData.setExifData) إلى null.

getOriginalOptions()

public ImageOptionsBase getOriginalOptions()

يحصل على الخيارات بناءً على إعدادات الملف الأصلي. يمكن أن يكون ذلك مفيدًا للحفاظ على عمق البت وغيرها من معلمات الصورة الأصلية دون تغيير. على سبيل المثال، إذا قمنا بتحميل صورة PNG بالأبيض والأسود بعمق 1 بت لكل بكسل ثم حفظناها باستخدام طريقة DataStreamSupporter.save(String)، سيتم إنتاج صورة PNG ناتجة بعمق 8 بت لكل بكسل. لتجنب ذلك وحفظ صورة PNG بعمق 1 بت لكل بكسل، استخدم هذه الطريقة للحصول على خيارات الحفظ المقابلة ومررها إلى طريقة Image.save(String, ImageOptionsBase) كمعامل ثانٍ.

Returns: ImageOptionsBase - The options based on the original file settings.

alignResolutions()

public void alignResolutions()

طريقة مساعدة لجعل الدقة الأفقية والرأسية متساوية.

copyFrame(TiffFrame tiffFrame)

public static TiffFrame copyFrame(TiffFrame tiffFrame)

ينسخ الإطار بالكامل (نسخ مكررة).

Parameters:

معاملنوعالوصف
tiffFrameTiffFrameإطار TIFF للنسخ.

Returns: TiffFrame - The newly copied tiff frame.

createFrameFrom(TiffFrame tiffFrame, TiffOptions options)

public static TiffFrame createFrameFrom(TiffFrame tiffFrame, TiffOptions options)

ينشئ الإطار من tiffFrame المحدد باستخدام options المحددة. يتم الحفاظ على بيانات البكسل ولكن يتم تحويلها إلى الصيغة المطلوبة.

Parameters:

معاملنوعالوصف
tiffFrameTiffFrameإطار TIFF لإنشاء منه.
optionsTiffOptionsالخيارات الجديدة للاستخدام.

Returns: TiffFrame - The newly created frame.

Example: The following example shows how to create a grayscale copy of an existing frame and add it to a TIFF image.

String dir = "c:\\temp\\";

com.aspose.imaging.imageoptions.TiffOptions createTiffOptions
        = new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);

// إنشاء مصدر ملف دائم، غير مؤقت.
createTiffOptions.setSource(new com.aspose.imaging.sources.FileCreateSource(dir + "multipage.tif", false));
createTiffOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.Rgb);
createTiffOptions.setBitsPerSample(new int[]{8, 8, 8});

com.aspose.imaging.fileformats.tiff.TiffImage tiffImage = (com.aspose.imaging.fileformats.tiff.TiffImage) com.aspose.imaging.Image.create(createTiffOptions, 100, 100);
try {
    // التدرج الخطي من الزاوية اليسرى العليا إلى الزاوية اليمنى السفلية للصورة.
    com.aspose.imaging.brushes.LinearGradientBrush brush =
            new com.aspose.imaging.brushes.LinearGradientBrush(
                    new com.aspose.imaging.Point(0, 0),
                    new com.aspose.imaging.Point(tiffImage.getWidth(), tiffImage.getHeight()),
                    com.aspose.imaging.Color.getRed(),
                    com.aspose.imaging.Color.getGreen());

    // ملء الإطار النشط بفرشاة تدرج خطي.
    com.aspose.imaging.Graphics gr = new com.aspose.imaging.Graphics(tiffImage.getActiveFrame());
    gr.fillRectangle(brush, tiffImage.getBounds());

    // خيارات التدرج الرمادي
    com.aspose.imaging.imageoptions.TiffOptions createTiffFrameOptions
            = new com.aspose.imaging.imageoptions.TiffOptions(com.aspose.imaging.fileformats.tiff.enums.TiffExpectedFormat.Default);
    createTiffFrameOptions.setSource(new com.aspose.imaging.sources.StreamSource(new java.io.ByteArrayInputStream(new byte[0])));
    createTiffFrameOptions.setPhotometric(com.aspose.imaging.fileformats.tiff.enums.TiffPhotometrics.MinIsBlack);
    createTiffFrameOptions.setBitsPerSample(new int[]{8});

    // إنشاء نسخة بتدرج رمادي من الإطار النشط.
    // يتم الحفاظ على بيانات البكسل ولكن يتم تحويلها إلى الصيغة المطلوبة.
    com.aspose.imaging.fileformats.tiff.TiffFrame grayscaleFrame
            = com.aspose.imaging.fileformats.tiff.TiffFrame.createFrameFrom(tiffImage.getActiveFrame(), createTiffFrameOptions);

    // إضافة الإطار الذي تم إنشاؤه حديثًا إلى صورة TIFF.
    tiffImage.addFrame(grayscaleFrame);

    tiffImage.save();
} finally {
    tiffImage.dispose();
}

resize(int newWidth, int newHeight, int resizeType)

public void resize(int newWidth, int newHeight, int resizeType)

يُعيد تحجيم الصورة.

Parameters:

معاملنوعالوصف
newWidthintالعرض الجديد.
newHeightintالارتفاع الجديد.
resizeTypeintنوع تغيير الحجم.

rotateFlip(int rotateFlipType)

public void rotateFlip(int rotateFlipType)

يدور، يقلب، أو يدور ويقلب الصورة.

Parameters:

معاملنوعالوصف
rotateFlipTypeintنوع التدوير والقلب.

rotate(float angle, boolean resizeProportionally, Color backgroundColor)

public void rotate(float angle, boolean resizeProportionally, Color backgroundColor)

دوّر الصورة حول المركز.

Parameters:

معاملنوعالوصف
anglefloatزاوية الدوران بالدرجات. القيم الموجبة ستدور باتجاه عقارب الساعة.
resizeProportionallybooleanإذا تم تعيينه إلى true سيتغير حجم صورتك وفقًا لإسقاطات المستطيل المدور (نقاط الزوايا) وإلا سيبقى الأبعاد دون تغيير وتُدور محتويات الصورة الداخلية فقط.
backgroundColorColorلون الخلفية.

crop(Rectangle rectangle)

public void crop(Rectangle rectangle)

قص الصورة.

Parameters:

معاملنوعالوصف
rectangleRectangleالمستطيل.