2014-01-30 65 views
5

爲什麼這個特定的圖像導致我的應用程序崩潰與OutOfMemoryException?爲什麼這個特定的圖像會導致我的應用程序崩潰並導致OutOfMemoryException異常?

enter image description here

我創建了一個非常簡單的WPF Windows應用程序有一個簡單的窗口:

<Window x:Class="DeleteMe.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Image Source="C:\Path\To\The\Image\MyImage.png" RenderOptions.BitmapScalingMode="Fant"></Image> 
    </Grid> 
</Window> 
  • 如果是x86或x64沒關係。
  • 如果我調整圖像文件的大小,即使是1像素它的作品。
  • 如果我將幾個像素添加到圖像並保存它,它仍然不起作用。
  • 該問題僅在FantHighQuality位圖縮放模式下發生。

這是一個問題的原因是我不想調整我們從創建這些圖像的人獲得的每個圖像的大小。正如我所說,我正在使用Paint.Net處理圖像。

謝謝。

我的事件查看器給了我下面的:

Application: DeleteMe.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.OutOfMemoryException 
Stack: 
    at System.Windows.Media.Composition.DUCE+Channel.SyncFlush() 
    at System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean, System.Nullable`1 
<ChannelSet>) 
    at System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr) 
    at System.Windows.Interop.HwndTarget.HandleMessage(MS.Internal.Interop.WindowMessage, IntPtr, IntPtr) 
    at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) 
    at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) 
    at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) 
    at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) 
    at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr, IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr, IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr, IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.HwndSubclass.DefWndProcWrapper(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.CallWindowProc(IntPtr, IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr) 
    at MS.Win32.UnsafeNativeMethods.DispatchMessage(System.Windows.Interop.MSG ByRef) 
    at System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) 
    at System.Windows.Threading.Dispatcher.Run() 
    at System.Windows.Application.RunDispatcher(System.Object) 
    at System.Windows.Application.RunInternal(System.Windows.Window) 
    at System.Windows.Application.Run(System.Windows.Window) 
    at System.Windows.Application.Run() 
    at DeleteMe.App.Main() 
+0

我記得早在.NET中,一些圖像API會在加載格式不正確的圖像時拋出OOM。這不是一個致命的進程崩潰OOM,只是一個「嘿這張圖片有一個不好的尺寸輸入」OOM。也許這就是這裏發生的事情。只是嘗試直接加載圖像,看看是否工作或投擲 – JaredPar

+0

伸手可及但在項目中嘗試圖像 – Paparazzi

+2

當我添加與上述相同的XAML時,這不是炸燬我。在代碼隱藏方面有什麼?你的圖形驅動程序是最新的嗎? – Matt

回答

0

至於我可以告訴你的問題相當於WPF已知,但目前未經證實的錯誤,看到Microsoft Connect。有趣的是,這個問題已被標記爲重複,但我無法找到其他問題。我不會感到驚訝,如果這是唯一的內部...

解決方法

如果您的問題真的被連接到上面的錯誤,然後有一個簡單的解決方法:只要你的基於調色板的PNG8轉換爲基於非調色板的PNG24。這可以通過例如使用Photoshop或GIMP。

相關問題