XNA纹理加载速度(适用于超大纹理尺寸)

时间:2013-07-12 16:53:28

标签: performance xna size textures

[仅针对问题跳到底部]

在开发我的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加载图像,然后将其转换为Bitmap,因为它似乎没有任何限制。 (稍后将此Bitmap转换为Texture2D列表。)

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

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

1 个答案:

答案 0 :(得分:2)

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

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