繁体   English   中英

WPF中的大位图maniuplation

[英]Large bitmap maniuplation in WPF

WPF是否能够操作GDI +因内存限制而无法处理的大位图?

我的位图容易10,000x10,000,甚至可能比这大得多。 最糟糕的情况我认为我可以将单个位图分解为大块并使用我想的。

我基本上需要做四件事

  1. 拍摄一组平铺图像
  2. 将所有这些图块放入单个位图中
  3. 将位图转换为黑白
  4. 扫描位图,查找从黑色到白色的变化

我知道如何在GDI +中做这些事情,但我遇到的问题是我的位图的大小对于我正在使用的机器来说太大了,它导致程序崩溃,我无法使图像变小所以我希望WPF能够在GDI +失败的地方取得成功。

我认为WPF无法在这里为您提供帮助。

为什么要使用位图对象? 您也可以使用二维字节或双精度数组(或任何其他类型,具体取决于您需要的精度和范围),尤其是如果您只使用一个通道。 位图具有访问器方法(GetPixel等),具有巨大的计算开销,使用数组的速度提高了几个数量级(我从个人经验中了解到),唯一的问题是您无法按原样显示它们(您必须将数组转换回图像,这很简单)。 但由于您似乎想对数据进行某种分析,我认为数组会更适合您的需求。

我可以发布代码示例,详细说明从位图(WPF或WinForms)转换到后面的数组(如果需要)。

但请记住,32位.NET应用程序可以使用大约1.2-1.4千兆字节的内存 - 您必须适应这个空间或者您开始​​获得OutOfMemory异常。

我最终决定最好的做法是只使用瓷砖,然后有一个数组,其中包含我需要的每个瓷砖的实际信息。 鉴于瓷砖的数量,这是我能做的唯一明智的事情。

像CommanderZ说的那样。 它的Windows PRESENTATION Foundation,而不是Windows Image-manipulation Foundation。 您应该尝试找到某种图像处理库,但要查看图像的大小,然后自己做一切可能只是方法。

特别是,您可能无法使用位图作为一个整体,因此您将使用磁贴。 然后,如果您需要使用相邻像素,则会出现问题。 但我想你应该亲自调查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM