Visual Studio 2015 调试 (x86) 在 8-bit-PNG 上引发 OutOfMemory
异常,但在 32-bit-PNG 上不会>。如果我将 debug 更改为(任何 CPU),则程序可以正常运行 8 位 和 32 位 图像。 8 位和原始 32 位 PNG 都是相同的图像,我使用 Photoshop 将原始 32 位 PNG 转换为 8 位 PNG。即使抛出 OutOfMemory,任务管理器也不会反射(reflect)任何内存问题(均低于 100MB)。
更奇怪的是,如果我在运行 8 位 PNG 之前首先运行(即添加到 StackPanel)32 位 PNG,那么程序运行正常,没有 OutOfMemory 异常,这只会得到如果 8 位 PNG 是第一个要添加到 StackPanel 的图像,则抛出。
这似乎没有意义?
Image _img = new Image();
BitmapImage _bi = new BitmapImage(new Uri(_path, UriKind.Absolute));
_img.Source = _bi;
stackPanel.Children.Add(_img)
最佳答案
您的 8 位 PNG 图像可能有不正确的 DPI
元数据。在某些时候,WPF 渲染器会尝试缩放您的图像。由于错误的 DPI
,你会得到一个疯狂的大位图,在这种情况下对于 32 位应用程序来说太大了。
如果内存使用确实稳定,我猜图像缩放方法会在实际分配位图数据之前抛出 OutOfMemoryException
。例如:
if (calculatedBitmapSize > int.MaxValue)
throw new OutOfMemoryException();
关于c# - 8 位 PNG 上的 OutOfMemory 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49506401/