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中,而无需将其加载到位图中,然后将其转换为单个元素Texture2D列表。

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

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

如果你确实需要坚持你目前的技术,你可能想看看这个关于如何在不加载整个文件的情况下读取图像大小的答案。

最新更新