Уникнення погіршення продуктивності при малюванні на стиснених зображеннях

Уникнення погіршення продуктивності при малюванні на стиснених зображеннях

Є моменти, коли вам потрібно виконати надзвичайно розгалужені графічні операції на стисненому зображенні. Коли Aspose.PSD повинен стискувати та розпаковувати зображення на льоту, може виникнути погіршення продуктивності. Малювання на стиснених зображеннях також може призвести до погіршення продуктивності.

Рішення

Щоб уникнути погіршення продуктивності, ми рекомендуємо перетворити зображення в нестиснутий або RAW формат перед виконанням графічних операцій.

Використання шляху файлу

У наступному прикладі зображення PSD перетворюється в нестиснутий формат (без стиснення) та зберігається на диск. Потім нестиснене зображення знову завантажується, перш ніж на ньому виконуються графічні операції. Та ж сама техніка застосовується для файлів BMP та GIF.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
PsdOptions saveOptions = new PsdOptions();
saveOptions.CompressionMethod = CompressionMethod.Raw;
psdImage.Save(dataDir + "uncompressed_out.psd", saveOptions);
}
// Now reopen the newly created image.
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "uncompressed_out.psd"))
{
Graphics graphics = new Graphics(psdImage);
// Perform graphics operations.
}

Використання об’єкта потоку

Наведений нижче фрагмент коду показує вам, як зображення PSD перетворюється в нестиснутий формат (без стиснення) та зберігається на диск за допомогою MemoryStream.

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
{
// Load a PSD file as an image and cast it into PsdImage
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd"))
{
PsdOptions saveOptions = new PsdOptions();
saveOptions.CompressionMethod = CompressionMethod.Raw;
psdImage.Save(stream, saveOptions);
}
// Now reopen the newly created image. But first seek to the beginning of stream since after saving seek is at the end now.
stream.Seek(0, System.IO.SeekOrigin.Begin);
using (PsdImage psdImage = (PsdImage)Image.Load(stream))
{
Graphics graphics = new Graphics(psdImage);
// Perform graphics operations.
}
}