Избягване на деградация на производителността при рисуване върху компресирани изображения

Избягване на деградация на производителността при рисуване върху компресирани изображения

Има моменти, когато искате да извършите изключително обширни графични операции върху компресирано изображение. Когато Aspose.PSD трябва да компресира и декомпресира изображения на летището, може да се стигне до деградация на производителността. Рисуването върху компресирани изображения също може да доведе до наказание за производителността.

Решение

За да избегнете деградация на производителността, препоръчваме ви да конвертирате изображението в некомпресиран, или суров, формат преди извършването на графични операции.

Използване на път на файла

В примера, който следва, 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.
}

Използване на обект Stream

Следният откъс код показва как 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.
}
}