WPF是否能够操作GDI +因内存限制而无法处理的大位图?
我的位图容易10,000x10,000,甚至可能比这大得多。最糟糕的情况我认为我可以将单个位图分解为大块,并且我可以使用它。
我基本上需要做四件事
我知道如何在GDI +中执行这些操作,但我遇到的问题是我的位图的大小对于我正在使用的机器而言太大,并且它导致程序崩溃,我无法使任何更小的图像,所以我希望WPF能够在GDI +失败的地方取得成功。
答案 0 :(得分:1)
我认为WPF无法在这里为您提供帮助。
为什么要使用位图对象?您也可以使用二维字节或双精度数组(或任何其他类型,具体取决于您需要的精度和范围),尤其是如果您只使用一个通道。位图具有访问器方法(GetPixel等),具有巨大的计算开销,使用数组的速度提高了几个数量级(我从个人经验中了解到),唯一的问题是您无法按原样显示它们(您必须将数组转换回图像,这很简单)。但由于您似乎想对数据进行某种分析,我认为数组更适合您的需求。
我可以发布代码示例,详细说明从位图(WPF或WinForms)转换到后面的数组(如果需要)。
但请记住,32位.NET应用程序可以使用大约1.2-1.4千兆字节的内存 - 您必须适应这个空间或者开始获得OutOfMemory异常。
答案 1 :(得分:1)
我最终决定最好的做法是仅使用磁贴,然后有一个数组,其中包含我需要的每个磁贴的实际信息。鉴于瓷砖的数量,这是我能做的唯一明智的事情。
答案 2 :(得分:0)
特别是,您可能无法使用位图作为一个整体,因此您将使用磁贴。然后,如果您需要使用相邻像素,则会出现问题。但我想你应该亲自调查一下。