Con WPF BitmapSource
, no hay una eliminación determinista de la corriente subyacente, por lo que puede terminar con cerraduras mientras haya una referencia.
You --> XImage --> BitmapSource --> Stream
Si llamas deseche en el XImage
, lanzará su referencia en el BitmapSource
, que permitirá que se finalice cuando el GC se sienta así.
Puede controlar cuándo el archivo está cerrado proporcionando transmisión en lugar de una ruta y cerrándolo explícitamente. Hacerlo prematuramente causará excepciones en BitmapSource
, sin embargo, así que asegúrese de no estar usando el BitmapSource
Después de cerrar la corriente.
using (var fsImage = File.Open(tiff_path, FileMode.Open, FileAccess.Read, FileShare.None))
{
var output = new PdfDocument();
var input = PdfReader.Open(template_path, PdfDocumentOpenMode.Import);
var page = input.Pages[0];
output.AddPage(page);
page = output.Pages[0];
var gfx = XGraphics.FromPdfPage(page);
var bitmapSource = new BitmapImage();
bitmapSource.BeginInit();
bitmapSource.StreamSource = fsImage;
bitmapSource.EndInit();
using (var image = XImage.FromBitmapSource(bitmapSource))
{
gfx.DrawImage(image, 500, 200, 400, 400);
}
output.Save(destination_path);
output.Close();
}
Si su imagen es lo suficientemente pequeña, puede omitir la transmisión y simplemente usar el BitmapCacheOption
de OnLoad
Para cerrar la fuente después de la apertura, pero esto hará que toda la imagen se cargue en la memoria.