Evite a Degradação de Desempenho ao Desenhar sobre Imagens Comprimidas

Evite a Degradação de Desempenho ao Desenhar sobre Imagens Comprimidas

Há momentos em que deseja realizar operações gráficas extremamente extensas sobre uma imagem comprimida. Quando o Aspose.PSD precisa comprimir e descomprimir imagens dinamicamente, pode ocorrer degradação de desempenho. Desenhar sobre imagens comprimidas também pode acarretar uma penalidade de desempenho.

Solução

Para evitar a degradação de desempenho, recomendamos que converta a imagem para um formato não comprimido, ou raw, antes de realizar operações gráficas.

Usando o Caminho do Arquivo

No exemplo a seguir, uma imagem PSD é convertida para o formato raw (sem compressão) e salva no disco. A imagem não comprimida é então carregada de volta antes que as operações gráficas sejam realizadas. A mesma técnica se aplica para arquivos BMP e 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.
}

Usando um Objeto de Fluxo (Stream)

O trecho de código a seguir mostra como uma imagem PSD é convertida para o formato raw (sem compressão) e salva no disco usando 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.
}
}