Vyhněte se degradaci výkonu při kreslení nad komprimovanými obrázky
Vyhněte se degradaci výkonu při kreslení nad komprimovanými obrázky
Existují časy, kdy chcete provádět extrémně rozsáhlé grafické operace na komprimovaném obrázku. Když musí Aspose.PSD komprimovat a dekomprimovat obrázky na počkání, může dojít k degradaci výkonu. Kreslení nad komprimovanými obrázky může také nést trestní výkon.
Řešení
Pro předejití degradaci výkonu doporučujeme, abyste před provedením grafických operací převedli obrázek do nekomprimovaného nebo surového formátu.
Použití cesty k souboru
V následujícím příkladu je obrázek PSD převeden do surového formátu (bez komprese) a uložen na disk. Nekomprimovaný obrázek je poté znovu načten před provedením grafických operací na něm. Stejná technika platí pro soubory BMP a 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. | |
} |
Použití objektu proudění
Následující výňatek kódu vám ukazuje, jak je obrázek PSD převeden do surového formátu (bez komprese) a uložen na disk pomocí 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. | |
} | |
} |