BufferSizeHint

ImageOptionsBase.BufferSizeHint property

Получает или задает подсказку о размере буфера, которая определяет максимально допустимый размер для всех внутренних буферов.

public int BufferSizeHint { get; set; }

Стоимость имущества

Подсказка о размере буфера в мегабайтах. Неположительное значение означает отсутствие ограничения памяти для внутренних буферов

Примеры

В следующем примере показано, как установить ограничение памяти при создании нового изображения JPEG. Предел памяти — это максимально допустимый размер (в мегабайтах) для всех внутренних буферов.

[C#]

string dir = "c:\\aspose.imaging\\issues\\net\\3404\\";

// Установка ограничения памяти в 50 мегабайт для целевого созданного образа
Aspose.Imaging.ImageOptionsBase createOptions = new Aspose.Imaging.ImageOptions.JpegOptions
{
    CompressionType = Aspose.Imaging.FileFormats.Jpeg.JpegCompressionMode.Progressive,
    BufferSizeHint = 50,
    Source = new Aspose.Imaging.Sources.FileCreateSource(dir + "createdFile.jpg", false),
};
    
using (var image = Aspose.Imaging.Image.Create(createOptions, 1000, 1000))
{
    image.Save(); // сохранить в том же месте
}

В следующем примере показано, как установить ограничение памяти при создании изображения PNG и рисовании на нем сложной графики. Предел памяти — это максимально допустимый размер (в мегабайтах) для всех внутренних буферов.

[C#]

string dir = "c:\\aspose.imaging\\issues\\net\\3383\\";

const int ImageSize = 2000;
Aspose.Imaging.ImageOptionsBase createOptions = new Aspose.Imaging.ImageOptions.PngOptions();
createOptions.Source = new Aspose.Imaging.Sources.FileCreateSource(dir + "graphics_simple.png", false);
createOptions.BufferSizeHint = 30; // Ограничение памяти 30 Мб

using (Aspose.Imaging.Image image = Aspose.Imaging.Image.Create(createOptions, ImageSize, ImageSize))
{
    Aspose.Imaging.Graphics graphics = new Aspose.Imaging.Graphics(image);
    // Здесь можно использовать любые графические операции, все они будут выполняться в рамках установленного лимита памяти
    // Например:
    graphics.Clear(Aspose.Imaging.Color.LightSkyBlue);
    graphics.DrawLine(new Aspose.Imaging.Pen(Aspose.Imaging.Color.Red, 3f), 0, 0, image.Width, image.Height);

    image.Save();
}

// Также поддерживается большое количество графических операций:
const int OperationAreaSize = 10;
createOptions = new Aspose.Imaging.ImageOptions.PngOptions();
createOptions.Source = new Aspose.Imaging.Sources.FileCreateSource(dir + "graphics_complex.png", false);
createOptions.BufferSizeHint = 30; // Ограничение памяти 30 Мб

using (Aspose.Imaging.Image image = Aspose.Imaging.Image.Create(createOptions, ImageSize, ImageSize))
{
    Aspose.Imaging.Graphics graphics = new Aspose.Imaging.Graphics(image);
    graphics.BeginUpdate();
    graphics.Clear(Aspose.Imaging.Color.LightSkyBlue);

    int x, y;
    int numberOfOperations = 0;
    for (int column = 0; column * OperationAreaSize < ImageSize; column++)
    {
        for (int row = 0; row * OperationAreaSize < ImageSize; row++)
        {
            x = column * OperationAreaSize;
            y = row * OperationAreaSize;

            bool reversed = (column + row) % 2 != 0;
            if (reversed)
            {
                graphics.DrawLine(
                    new Aspose.Imaging.Pen(Aspose.Imaging.Color.Red),
                    x + OperationAreaSize - 2,
                    y,
                    x,
                    y + OperationAreaSize);
            }
            else
            {
                graphics.DrawLine(
                    new Aspose.Imaging.Pen(Aspose.Imaging.Color.Red),
                    x,
                    y,
                    x + OperationAreaSize - 2,
                    y + OperationAreaSize);
            }

            numberOfOperations++;
        }
    }

    // Здесь будет применено около 40к операций, при этом они не занимают слишком много памяти 
    // так как они уже выгружены во внешний файл, и будут загружаться оттуда по одному
    graphics.EndUpdate();

    image.Save();
}

Смотрите также