From 4dafe7eebe7ea9b6e07e24e51921f76ae18e3a30 Mon Sep 17 00:00:00 2001 From: Paddy Xu Date: Mon, 29 May 2017 21:25:30 +0300 Subject: [PATCH] Dispose Bitmap after have converted to BitmapSource --- .../QuickLook.Plugin.PDFViewer/Extensions.cs | 9 ++------- .../PageIdToImageConverter.cs | 10 ++++++++-- .../QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml | 2 +- .../PdfViewerControl.xaml.cs | 4 +++- QuickLook/Plugin/InfoPanel/Extensions.cs | 12 +++--------- 5 files changed, 17 insertions(+), 20 deletions(-) diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Extensions.cs b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Extensions.cs index 3c6e21b..00858bb 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Extensions.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/Extensions.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; -using System.Runtime.InteropServices; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; @@ -37,12 +36,8 @@ namespace QuickLook.Plugin.PDFViewer return foundElement; } - [DllImport("gdi32")] - private static extern int DeleteObject(IntPtr o); - public static BitmapSource ToBitmapSource(this Bitmap source) { - var ip = source.GetHbitmap(); BitmapSource bs = null; try { @@ -57,9 +52,9 @@ namespace QuickLook.Plugin.PDFViewer bs.Freeze(); } - finally + catch { - DeleteObject(ip); + // ignored } return bs; diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PageIdToImageConverter.cs b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PageIdToImageConverter.cs index 8d4bbb2..e2662cf 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PageIdToImageConverter.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PageIdToImageConverter.cs @@ -11,7 +11,7 @@ namespace QuickLook.Plugin.PDFViewer if (values.Length < 2) throw new Exception("PageIdToImageConverter"); - var zoom = 0.5f; + var zoom = 0.3f; if (parameter != null) float.TryParse((string) parameter, out zoom); @@ -21,7 +21,13 @@ namespace QuickLook.Plugin.PDFViewer var pageId = (int) values[1]; if (pageId < 0) return null; - return handle.GetPage(pageId, zoom).ToBitmapSource(); + var bitmap = handle.GetPage(pageId, zoom); + var bs = bitmap.ToBitmapSource(); + bitmap.Dispose(); + + GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized); + + return bs; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml index 29ea080..d55cc6d 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml +++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml @@ -23,7 +23,7 @@