Windows mobile Windows Mobile-在CF.NET中按大小创建与设备无关的位图
我已经和渲染()斗争了一段时间,我仍然在寻找一种解决问题的好方法 我的引擎创建一个大位图(比屏幕大小大2倍或3倍),并将所有内容绘制到该表面。然后,我在屏幕上以偏移量绘制该图像,允许用户非常平滑地滚动 这在大多数情况下都很有效,但有些用户在创建大位图时会遇到OutOfMemoryExecutions。我已经完成了我的家庭作业,这似乎是因为我正在创建一个依赖于设备的位图(DDB),并且在Windows Mobile上,所有DDB都被分配到gwes.exe进程,以及所有其他应用程序位图。如果gwes.exe进程占用的空间超过3200万,则会出现此异常 我确实看到,设备独立位图(DIB)实际上是在您自己的进程空间中创建的,而不是分配给gwes.exe。因为在我的过程中,在达到32米之前,我有更多的空间,所以我想我会探索这种可能性 但我能找到的创建DIB的唯一方法是从流创建位图,就像现有文件一样。我想不出任何方法从头开始创建一个,并指定它为1280x240,256色 有人知道如何做到这一点吗?Chris Tacke可能会给你很多帮助,尤其是这一部分:Windows mobile Windows Mobile-在CF.NET中按大小创建与设备无关的位图,windows-mobile,compact-framework,Windows Mobile,Compact Framework,我已经和渲染()斗争了一段时间,我仍然在寻找一种解决问题的好方法 我的引擎创建一个大位图(比屏幕大小大2倍或3倍),并将所有内容绘制到该表面。然后,我在屏幕上以偏移量绘制该图像,允许用户非常平滑地滚动 这在大多数情况下都很有效,但有些用户在创建大位图时会遇到OutOfMemoryExecutions。我已经完成了我的家庭作业,这似乎是因为我正在创建一个依赖于设备的位图(DDB),并且在Windows Mobile上,所有DDB都被分配到gwes.exe进程,以及所有其他应用程序位图。如果gwes
编辑:可能更有用:)不久前,当我创建从Pocket PC打印到bluetootch打印机的自定义报告时,我不得不做类似的事情。我必须生成一张纸大小的位图,然后将其传输到打印机,所有使用托管对象执行此操作的尝试都会遇到内存问题,如您所见 我所做的(很抱歉,我无法向您提供这方面的直接来源):
- 定义并创建一个结构
- 去那个波黑
- 召唤
- 召唤
这样,您就可以在自己的进程中拥有所有这些信息(事实上,如果您将其设置得足够大,它将来自共享内存,并完全避免32MB的进程空间)。这篇文章基本上解决了整个问题。我理解它为什么要创建DDB。从一个流创建一个位图似乎只有在该流包含一个现有文件时才有效。这正是我一直在寻找的,谢谢!您能告诉我更多关于如何避免使用32MB进程空间的信息吗?