Unikaj Degradacji Wydajności Przy Rysowaniu na Skompresowanych Obrazach

Unikaj Degradacji Wydajności Przy Rysowaniu na Skompresowanych Obrazach

Są momenty, kiedy chcesz wykonać bardzo złożone operacje graficzne na skompresowanym obrazie. Gdy Aspose.PSD musi kompresować i dekompresować obrazy na żywo, może wystąpić degradacja wydajności. Rysowanie na skompresowanych obrazach może również wiązać się z karą dla wydajności.

Rozwiązanie

Aby uniknąć degradacji wydajności, zalecamy konwersję obrazu do formatu nieskompresowanego, czyli surowego, przed wykonywaniem operacji graficznych.

Używanie Ścieżki Pliku

W poniższym przykładzie obraz PSD jest konwertowany do formatu surowego (bez kompresji) i zapisywany na dysku. Nieskompresowany obraz jest następnie ponownie wczytywany przed wykonaniem na nim operacji graficznych. Ta sama technika dotyczy plików BMP i 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.
}

Używanie Obiektu Strumienia

Poniższy fragment kodu pokazuje, jak obraz PSD jest konwertowany do formatu surowego (bez kompresji) i zapisywany na dysku przy użyciu 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.
}
}