2013-07-12 85 views
0

[跳到底部的问题只有]XNA纹理加载速度(对于超大的纹理尺寸)

在开发我的XNA游戏我来到了另一个可怕XNA限制:至少在我的电脑上的Texture2D-S( )的尺寸不能超过2048 * 2048。没问题,我很快编写了自定义纹理类,默认情况下使用[System.Drawing。]位图,并最终将纹理分割为更小的Texture2D-s,并根据需要显示它们。

当我做了这个改变,我也不得不更新加载纹理的方法。当在旧版本中加载Texture2D-s时,我使用了Texture2D.FromStream(),它工作得很好,但XNA甚至无法存储/加载高于极限的纹理,所以如果我试图加载/存储一个说4092 * 2048 PNG文件我结束了在我的应用程序中有2048 * 2048的Texture2D。因此,我转而使用[System.Drawing。] Image.FromFile加载图像,然后将其转换为位图,因为它似乎没有任何限制。 (稍后将此位图转换为Texture2D列表。)

问题是,以这种方式加载纹理明显较慢,因为现在即使是那些低于2048 * 2048限制的图像也会作为位图加载,然后转换为的Texture2D。所以我实际上正在寻找一种方法来分析图像文件,并在将其加载到我的应用程序之前检查其尺寸(宽度;高度)。因为如果它处于纹理限制之下,我可以直接将它加载到Texture2D中,而无需将其加载到Bitmap中,然后将其转换为单个元素Texture2D列表。

是否有任何(干净,可能非常快)的方式来获取图像文件的尺寸而不会将整个文件加载到应用程序中?如果是,它甚至值得使用吗?正如我猜测,最慢的指令是在这里打开/寻找文件(可能是基于硬件的,涉及到hdd-s),而不是将内容流式传输到应用程序中。

回答

2

您是否需要支持任意大的纹理?如果没有,切换到HiDef配置文件将得到4096x4096大小的纹理支持。

如果您确实需要坚持使用您当前的技术,则可能需要查看this answer,了解如何在不加载整个文件的情况下读取图像大小。